using BMA.EHR.Application.Common.Interfaces; using BMA.EHR.Domain.Extensions; using BMA.EHR.Domain.Models.Retirement; using Microsoft.AspNetCore.Hosting; using Microsoft.EntityFrameworkCore; //using Telerik.Reporting; //using Telerik.Reporting.Processing; namespace BMA.EHR.Application.Repositories.Reports { public class RetireReportRepository { #region " Fields " private readonly IApplicationDBContext _dbContext; private readonly IWebHostEnvironment _hostingEnvironment; #endregion #region " Constructor and Destructor " public RetireReportRepository(IApplicationDBContext dbContext, IWebHostEnvironment hostEnvironment) { _dbContext = dbContext; _hostingEnvironment = hostEnvironment; } #endregion #region " Methods " //public async Task> GetListRetirePeriodAsync(Guid Id) //{ // try // { // // 1. query // //var data = await _dbContext.Set() // // .Include(x => x.RetirementProfiles) // // .ThenInclude(x => x.Profile) // // .ToListAsync(); // // 2. data not found throw exception // // 3. Load Report File // //return data; // } // catch // { // throw; // } //} public async Task GetProfileRetirementdAsync(Guid retireId) { var retire = await _dbContext.Set() .Include(x => x.RetirementProfiles) .FirstOrDefaultAsync(x => x.Id == retireId); if (retire == null) { var retireHistorys = await _dbContext.Set().AsQueryable() .FirstOrDefaultAsync(x => x.Id == retireId); if (retireHistorys == null) return null; var profile_retireHistory = await _dbContext.Set() .Where(x => x.RetirementPeriod == retire) .OrderBy(x => x.Order) .Select(x => new { order = x.Order, id = x.Id, reason = x.Reason, remove = x.Remove, profileId = x.Profile.Id, citizenId = x.Profile.CitizenId, prefix = x.Profile.Prefix == null ? null : x.Profile.Prefix.Name, fullName = $"{x.Profile.FirstName} {x.Profile.LastName}", organizationOrganization = x.Profile.OrganizationOrganization, oc = x.Profile.Oc, position = x.Profile.Position == null ? null : x.Profile.Position.Name, positionType = x.Profile.PositionType == null ? null : x.Profile.PositionType.Name, positionExecutive = x.Profile.PositionExecutive, posNo = x.Profile.PosNo == null ? null : x.Profile.PosNo.Name, positionEmployeePosition = x.Profile.PositionEmployeePosition, positionEmployeeLevel = x.Profile.PositionEmployeeLevel, positionEmployeeGroup = x.Profile.PositionEmployeeGroup, posNoEmployee = x.Profile.PosNoEmployee, }) .ToListAsync(); return new { retireHistorys.Id, retireHistorys.CreatedAt, Year = retireHistorys.Year.ToThaiYear().ToString().ToThaiNumber(), retireHistorys.Round, retireHistorys.Type, retireHistorys.TypeReport, Total = retireHistorys.Total.ToString().ToThaiNumber(), profile = profile_retireHistory }; } else { var profile_retire = await _dbContext.Set() .Where(x => x.RetirementPeriod == retire) .OrderBy(x => x.Order) .Select(x => new { order = x.Order, id = x.Id, reason = x.Reason, remove = x.Remove, profileId = x.Profile.Id, citizenId = x.Profile.CitizenId, prefix = x.Profile.Prefix == null ? null : x.Profile.Prefix.Name, fullName = $"{x.Profile.FirstName} {x.Profile.LastName}", organizationOrganization = x.Profile.OrganizationOrganization, oc = x.Profile.Oc, position = x.Profile.Position == null ? null : x.Profile.Position.Name, positionType = x.Profile.PositionType == null ? null : x.Profile.PositionType.Name, positionExecutive = x.Profile.PositionExecutive, posNo = x.Profile.PosNo == null ? null : x.Profile.PosNo.Name, positionEmployeePosition = x.Profile.PositionEmployeePosition, positionEmployeeLevel = x.Profile.PositionEmployeeLevel, positionEmployeeGroup = x.Profile.PositionEmployeeGroup, posNoEmployee = x.Profile.PosNoEmployee, }) .ToListAsync(); return new { retire.Id, retire.CreatedAt, Year = retire.Year.ToThaiYear().ToString().ToThaiNumber(), retire.Round, retire.Type, retire.TypeReport, Total = profile_retire.Count.ToString().ToThaiNumber(), profile = profile_retire }; } //Report //var rptFile = Path.Combine(_hostingEnvironment.ContentRootPath, "Reports", $"32-ประกาศเกษียณลูกจ้างประจำ.trdp"); //ReportPackager reportPacker = new ReportPackager(); //Telerik.Reporting.Report? report = null; //using (var sourceStream = System.IO.File.OpenRead(rptFile)) //{ // report = (Telerik.Reporting.Report)reportPacker.UnpackageDocument(sourceStream); //} //System.Collections.Hashtable deviceInfo = new System.Collections.Hashtable(); //InstanceReportSource instanceReportSource = new InstanceReportSource() //{ // ReportDocument = report, //}; //ReportProcessor reportProcessor = new ReportProcessor(_configuration); //RenderingResult result = reportProcessor.RenderReport("PDF", instanceReportSource, deviceInfo); //var content = result.DocumentBytes; //return File(content, "application/pdf", $"ประกาศเกษียณลูกจ้างประจำ_{null}.pdf"); } #endregion } }