using BMA.EHR.Domain.Common; using BMA.EHR.Domain.Extensions; using BMA.EHR.Domain.Shared; using BMA.EHR.Application.Repositories.Reports; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.ModelBinding.Binders; using Swashbuckle.AspNetCore.Annotations; using DocumentFormat.OpenXml.Drawing; using Telerik.Reporting; using Telerik.Reporting.Processing; using System.IO; namespace BMA.EHR.Report.Service.Controllers { [Route("api/v{version:apiVersion}/report/resign")] [ApiVersion("2.0")] [ApiController] [Produces("application/json")] [Authorize] [SwaggerTag("API รายงานระบบลาออก")] public class ResignReportController : BaseController { #region " Fields " private readonly IWebHostEnvironment _hostingEnvironment; private readonly IConfiguration _configuration; private readonly RetireReportRepository _service; private readonly GenericReportGenerator _reportGenerator; #endregion #region " Constuctor and Destructor " public ResignReportController(IWebHostEnvironment hostingEnvironment, IConfiguration configuration, RetireReportRepository service, GenericReportGenerator reportGenerator) { _hostingEnvironment = hostingEnvironment; _configuration = configuration; _service = service; _reportGenerator = reportGenerator; } #endregion #region " Methods " #region 33-แบบฟอร์มหนังสือขอลาออกจากราชการ /// /// 33-แบบฟอร์มหนังสือขอลาออกจากราชการ /// /// id /// pdf, docx หรือ xlsx /// /// เมื่อทำการอ่านข้อมูลจาก Relational Database สำเร็จ /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("33/{exportType}/{id}")] public async Task> GetResign33ConvertReportAsync(string id= "08dbca15-bb57-4b2e-8435-69116599421b", string exportType = "pdf") { try { Guid ids = Guid.Parse(id); var resign = await _service.GetResignByUser(ids); if (resign == null) return NotFound(); var mimeType = ""; switch (exportType.Trim().ToLower()) { case "pdf": mimeType = "application/pdf"; break; case "docx": mimeType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; break; case "xlsx": mimeType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; break; } //var FullName = resign.GetType().GetProperty("FirstName").GetValue(resign); var rptFile1 = System.IO.Path.Combine(_hostingEnvironment.ContentRootPath, "Reports", $"33-แบบฟอร์มหนังสือขอลาออกจากราชการ-1.trdp"); var rptFile2 = System.IO.Path.Combine(_hostingEnvironment.ContentRootPath, "Reports", $"33-แบบฟอร์มหนังสือขอลาออกจากราชการ-2.trdp"); ReportPackager reportPacker = new ReportPackager(); Telerik.Reporting.Report? report1 = null; Telerik.Reporting.Report? report2 = null; using (var sourceStream1 = System.IO.File.OpenRead(rptFile1)) using (var sourceStream2 = System.IO.File.OpenRead(rptFile2)) { report1 = (Telerik.Reporting.Report)reportPacker.UnpackageDocument(sourceStream1); report2 = (Telerik.Reporting.Report)reportPacker.UnpackageDocument(sourceStream2); } report1.DataSource = resign; var reportBook = new ReportBook(); reportBook.Reports.Add(report1); reportBook.Reports.Add(report2); System.Collections.Hashtable deviceInfo = new System.Collections.Hashtable(); InstanceReportSource instanceReportSource = new InstanceReportSource() { ReportDocument = reportBook, }; ReportProcessor reportProcessor = new ReportProcessor(_configuration); RenderingResult result = reportProcessor.RenderReport($"{exportType}", instanceReportSource, deviceInfo); return File(result.DocumentBytes, mimeType, $"แบบฟอร์มหนังสือขอลาออกจากราชการ.{exportType.Trim().ToLower()}"); } catch { throw; } } #endregion #endregion } }