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(); //first sheetName sl.RenameWorksheet(SLDocument.DefaultFirstSheetName, "ConcessionValidation"); SLStyle style = sl.CreateStyle(); style.SetFontUnderline(DocumentFormat.OpenXml.Spreadsheet.UnderlineValues.Single); style.SetFontBold(true); style.SetFont("Arial Black", 16); sl.SetCellStyle(1, 5, style); sl.SetRowHeight(1, 1, 25); sl.SetCellValue(row++, 5, "The ConssionValidation Report"); sl.SetCellValue(1, 8, " " + DateTime.Now.ToString("ddd dd/MM/yyyy HH:mm")); int startTitleRow = 3; row = startTitleRow; //make the title bold style = sl.CreateStyle(); style.Font.Bold = true; sl.SetRowStyle(startTitleRow, style); //set it height sl.SetRowHeight(startTitleRow, startTitleRow, 25); // 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++, "Is Concession Expiry"); sl.SetCellValue(row, col++, "ConcessionType"); sl.SetCellValue(row, col++, "Validation Piont"); sl.SetCellValue(row, col++, "StaffLink No"); sl.SetCellValue(row, col++, "Staff first name"); sl.SetCellValue(row, col++, "Staff last name"); sl.SetCellValue(row, col++, "Staff Email"); //wrap text on is concession Expiry style = sl.CreateStyle(); style.SetWrapText(true); sl.SetColumnStyle(4, style); //format date style = sl.CreateStyle(); style.FormatCode = "dd/mm/yyyy"; sl.SetColumnStyle(1, style); //make column width sl.SetColumnWidth(1, 20); sl.SetColumnWidth(2, 18); sl.SetColumnWidth(3, 25); sl.SetColumnWidth(4, 20); sl.SetColumnWidth(5, 30); sl.SetColumnWidth(6, 40); sl.SetColumnWidth(7, 20); sl.SetColumnWidth(8, 20); sl.SetColumnWidth(9, 20); sl.SetColumnWidth(10, 20); int startRowFrom = startTitleRow+1; 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 + startRowFrom; sl.SetCellValue(row, col++, item.ValidateDate); sl.SetCellValue(row, col++, item.ConcessionCard); sl.SetCellValue(row, col++, item.ConcessionHolder); sl.SetCellValue(row, col++, item.ConcessionExpiry ? "Yes": "No"); sl.SetCellValue(row, col++, item.ConcessionType); sl.SetCellValue(row, col++, item.ValidationPoint); sl.SetCellValue(row, col++, item.StafflinkNo); sl.SetCellValue(row, col++, item.StaffFirstName); sl.SetCellValue(row, col++, item.StaffLastName); sl.SetCellValue(row, col++, item.StaffEmail); } 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 }; } } }