api รายงานประกาศเกษียณลูกจ้างประจำ
This commit is contained in:
parent
9abb9c5422
commit
81b2ad210b
5 changed files with 211 additions and 29 deletions
|
|
@ -1,6 +1,7 @@
|
||||||
using BMA.EHR.Application.Repositories;
|
using BMA.EHR.Application.Repositories;
|
||||||
using BMA.EHR.Application.Repositories.Commands;
|
using BMA.EHR.Application.Repositories.Commands;
|
||||||
using BMA.EHR.Application.Repositories.MessageQueue;
|
using BMA.EHR.Application.Repositories.MessageQueue;
|
||||||
|
using BMA.EHR.Application.Repositories.Reports;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
|
||||||
namespace BMA.EHR.Application
|
namespace BMA.EHR.Application
|
||||||
|
|
@ -23,6 +24,7 @@ namespace BMA.EHR.Application
|
||||||
services.AddTransient<InboxRepository>();
|
services.AddTransient<InboxRepository>();
|
||||||
services.AddTransient<NotificationRepository>();
|
services.AddTransient<NotificationRepository>();
|
||||||
services.AddTransient<RetirementRepository>();
|
services.AddTransient<RetirementRepository>();
|
||||||
|
services.AddTransient<RetireReportRepository>();
|
||||||
|
|
||||||
return services;
|
return services;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,10 @@
|
||||||
using BMA.EHR.Application.Common.Interfaces;
|
using BMA.EHR.Application.Common.Interfaces;
|
||||||
using BMA.EHR.Domain.Extensions;
|
using BMA.EHR.Domain.Extensions;
|
||||||
using BMA.EHR.Domain.Models.Retirement;
|
using BMA.EHR.Domain.Models.Retirement;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using System;
|
//using Telerik.Reporting;
|
||||||
using System.Collections.Generic;
|
//using Telerik.Reporting.Processing;
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace BMA.EHR.Application.Repositories.Reports
|
namespace BMA.EHR.Application.Repositories.Reports
|
||||||
{
|
{
|
||||||
|
|
@ -16,46 +13,137 @@ namespace BMA.EHR.Application.Repositories.Reports
|
||||||
#region " Fields "
|
#region " Fields "
|
||||||
|
|
||||||
private readonly IApplicationDBContext _dbContext;
|
private readonly IApplicationDBContext _dbContext;
|
||||||
|
private readonly IWebHostEnvironment _hostingEnvironment;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region " Constructor and Destructor "
|
#region " Constructor and Destructor "
|
||||||
|
|
||||||
public RetireReportRepository(IApplicationDBContext dbContext)
|
public RetireReportRepository(IApplicationDBContext dbContext, IWebHostEnvironment hostEnvironment)
|
||||||
{
|
{
|
||||||
_dbContext = dbContext;
|
_dbContext = dbContext;
|
||||||
|
_hostingEnvironment = hostEnvironment;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region " Methods "
|
#region " Methods "
|
||||||
|
|
||||||
public async Task<List<RetirementPeriod>> GetListRetirePeriodAsync()
|
//public async Task<List<RetirementPeriod>> GetListRetirePeriodAsync(Guid Id)
|
||||||
|
//{
|
||||||
|
// try
|
||||||
|
// {
|
||||||
|
// // 1. query
|
||||||
|
// //var data = await _dbContext.Set<RetirementPeriod>()
|
||||||
|
// // .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<dynamic> GetProfileRetirementdAsync(Guid retireId)
|
||||||
{
|
{
|
||||||
try
|
var retire = await _dbContext.Set<RetirementPeriod>()
|
||||||
|
.Include(x => x.RetirementProfiles)
|
||||||
|
.FirstOrDefaultAsync(x => x.Id == retireId);
|
||||||
|
if (retire == null)
|
||||||
{
|
{
|
||||||
// 1. query
|
var retireHistorys = await _dbContext.Set<RetirementPeriodHistory>().AsQueryable()
|
||||||
var data = await _dbContext.Set<RetirementPeriod>()
|
.FirstOrDefaultAsync(x => x.Id == retireId);
|
||||||
.Include(x => x.RetirementPeriodHistorys)
|
if (retireHistorys == null)
|
||||||
.Include(x => x.RetirementProfiles)
|
return null;
|
||||||
.ThenInclude(x => x.Profile)
|
|
||||||
.ToListAsync();
|
|
||||||
|
|
||||||
// 2. data not found throw exception
|
var profile_retireHistory = await _dbContext.Set<RetirementProfile>()
|
||||||
|
.Where(x => x.RetirementPeriod == retire)
|
||||||
|
.OrderBy(x => x.Order)
|
||||||
// 3. Load Report File
|
.Select(x => new
|
||||||
|
{
|
||||||
|
order = x.Order,
|
||||||
|
id = x.Id,
|
||||||
return data;
|
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 };
|
||||||
|
|
||||||
}
|
}
|
||||||
catch
|
else
|
||||||
{
|
{
|
||||||
throw;
|
var profile_retire = await _dbContext.Set<RetirementProfile>()
|
||||||
|
.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
|
#endregion
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
namespace BMA.EHR.Domain.Extensions
|
namespace BMA.EHR.Domain.Extensions
|
||||||
{
|
{
|
||||||
public static class IntegerExtension
|
public static class IntegerExtension
|
||||||
|
|
@ -40,5 +42,25 @@ namespace BMA.EHR.Domain.Extensions
|
||||||
{
|
{
|
||||||
return number.ToString("#,##0");
|
return number.ToString("#,##0");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static string ToThaiNumber(this string value)
|
||||||
|
{
|
||||||
|
string arabicNumbers = "0123456789";
|
||||||
|
string thaiNumbers = "๐๑๒๓๔๕๖๗๘๙";
|
||||||
|
StringBuilder ThaiYear = new StringBuilder();
|
||||||
|
foreach (char digit in value)
|
||||||
|
{
|
||||||
|
int index = arabicNumbers.IndexOf(digit);
|
||||||
|
if (index >= 0)
|
||||||
|
{
|
||||||
|
ThaiYear.Append(thaiNumbers[index]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ThaiYear.Append(digit);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ThaiYear.ToString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,18 +1,88 @@
|
||||||
using BMA.EHR.Domain.Common;
|
using BMA.EHR.Domain.Common;
|
||||||
using Microsoft.AspNetCore.Authorization;
|
using BMA.EHR.Domain.Extensions;
|
||||||
using Microsoft.AspNetCore.Http;
|
using BMA.EHR.Application.Repositories.Reports;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Swashbuckle.AspNetCore.Annotations;
|
using Swashbuckle.AspNetCore.Annotations;
|
||||||
|
using Telerik.Reporting;
|
||||||
|
using Telerik.Reporting.Processing;
|
||||||
|
|
||||||
namespace BMA.EHR.Report.Service.Controllers
|
namespace BMA.EHR.Report.Service.Controllers
|
||||||
{
|
{
|
||||||
[Route("api/v{version:apiVersion}/report/retire")]
|
[Route("api/v{version:apiVersion}/report/retire")]
|
||||||
[ApiVersion("2.0")]
|
[ApiVersion("1.0")]
|
||||||
[ApiController]
|
[ApiController]
|
||||||
[Produces("application/json")]
|
[Produces("application/json")]
|
||||||
[Authorize]
|
//[Authorize]
|
||||||
[SwaggerTag("API รายงานระบบเกษียณ")]
|
[SwaggerTag("API รายงานระบบเกษียณ")]
|
||||||
public class RetireReportController : BaseController
|
public class RetireReportController : BaseController
|
||||||
{
|
{
|
||||||
|
private readonly RetireReportRepository _service;
|
||||||
|
private readonly IWebHostEnvironment _hostingEnvironment;
|
||||||
|
private readonly IConfiguration _configuration;
|
||||||
|
|
||||||
|
public RetireReportController(RetireReportRepository service, IWebHostEnvironment hostingEnvironment, IConfiguration configuration)
|
||||||
|
{
|
||||||
|
_service = service;
|
||||||
|
_hostingEnvironment = hostingEnvironment;
|
||||||
|
_configuration = configuration;
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet("{Id}")]
|
||||||
|
public async Task<ActionResult<ResponseObject>> GetProfileRetirement([FromRoute] Guid Id)
|
||||||
|
{
|
||||||
|
var retire = await _service.GetProfileRetirementdAsync(Id);
|
||||||
|
if (retire == null)
|
||||||
|
{
|
||||||
|
return NotFound(retire);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
//Add Parameter
|
||||||
|
report.ReportParameters["Year"].Value = retire.GetType().GetProperty("Year").GetValue(retire);
|
||||||
|
report.ReportParameters["Total"].Value = retire.GetType().GetProperty("Total").GetValue(retire);
|
||||||
|
|
||||||
|
var _profileList = new List<dynamic>();
|
||||||
|
|
||||||
|
foreach (var profile in retire.GetType().GetProperty("profile").GetValue(retire))
|
||||||
|
{
|
||||||
|
string thaiOrder = profile.GetType().GetProperty("order").GetValue(profile).ToString()+".";
|
||||||
|
thaiOrder = thaiOrder.ToThaiNumber();
|
||||||
|
_profileList.Add(new
|
||||||
|
{
|
||||||
|
order = thaiOrder,
|
||||||
|
fullName = profile.GetType().GetProperty("fullName").GetValue(profile).ToString(),
|
||||||
|
position = profile.GetType().GetProperty("position").GetValue(profile).ToString(),
|
||||||
|
posNo = profile.GetType().GetProperty("posNo").GetValue(profile).ToString(),
|
||||||
|
organizationOrganization = profile.GetType().GetProperty("organizationOrganization").GetValue(profile).ToString(),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
//Binding to Table
|
||||||
|
var tblProfile = (Telerik.Reporting.Table)report.Items["detailSection1"].Items["table1"];
|
||||||
|
tblProfile.DataSource = _profileList;
|
||||||
|
|
||||||
|
|
||||||
|
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");
|
||||||
|
}
|
||||||
|
//return Success(retire);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue