2023-05-11 09:52:56 +07:00
|
|
|
|
using BMA.EHR.Core;
|
|
|
|
|
|
using BMA.EHR.Extensions;
|
2023-05-10 20:11:47 +07:00
|
|
|
|
using BMA.EHR.Profile.Service.Controllers;
|
2023-05-11 09:52:56 +07:00
|
|
|
|
using BMA.EHR.Profile.Service.Services;
|
|
|
|
|
|
using BMA.EHR.Recruit.Service.Services;
|
2023-05-10 20:11:47 +07:00
|
|
|
|
using BMA.EHR.Report.Service.Data;
|
|
|
|
|
|
using BMA.EHR.Report.Service.Responses;
|
2023-05-11 09:52:56 +07:00
|
|
|
|
using GreatFriends.ThaiBahtText;
|
|
|
|
|
|
using iText.Kernel.Pdf;
|
2023-05-10 20:11:47 +07:00
|
|
|
|
using Microsoft.AspNetCore.Mvc;
|
2023-05-11 09:52:56 +07:00
|
|
|
|
using Microsoft.CodeAnalysis;
|
2023-05-12 22:05:47 +07:00
|
|
|
|
using Microsoft.EntityFrameworkCore;
|
2023-05-10 20:11:47 +07:00
|
|
|
|
using Swashbuckle.AspNetCore.Annotations;
|
|
|
|
|
|
using System.Drawing;
|
2023-05-11 09:52:56 +07:00
|
|
|
|
using Telerik.Reporting;
|
|
|
|
|
|
using Telerik.Reporting.Processing;
|
2023-05-10 20:11:47 +07:00
|
|
|
|
|
|
|
|
|
|
namespace BMA.EHR.Report.Service.Controllers
|
|
|
|
|
|
{
|
2023-05-30 10:11:40 +07:00
|
|
|
|
[Route("api/v{version:apiVersion}/report/profile")]
|
|
|
|
|
|
[ApiVersion("1.0")]
|
|
|
|
|
|
[ApiController]
|
|
|
|
|
|
[Produces("application/json")]
|
|
|
|
|
|
//[Authorize]
|
|
|
|
|
|
[SwaggerTag("รายงานระบบทะเบียนประวัติ")]
|
|
|
|
|
|
public class ProfileReportController : BaseController
|
|
|
|
|
|
{
|
|
|
|
|
|
#region " Fields "
|
|
|
|
|
|
|
|
|
|
|
|
private readonly EHRDbContext _context;
|
|
|
|
|
|
private readonly IWebHostEnvironment _hostingEnvironment;
|
|
|
|
|
|
private readonly IConfiguration _configuration;
|
|
|
|
|
|
private readonly string space = "ㅤ";
|
|
|
|
|
|
private readonly ProfileService _profileService;
|
|
|
|
|
|
private readonly MinIOService _minioService;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region " Constructor and Destructor "
|
|
|
|
|
|
|
|
|
|
|
|
public ProfileReportController(EHRDbContext context,
|
|
|
|
|
|
IWebHostEnvironment hostingEnvironment,
|
|
|
|
|
|
IConfiguration configuration,
|
|
|
|
|
|
ProfileService profileService,
|
|
|
|
|
|
MinIOService minioService)
|
|
|
|
|
|
{
|
|
|
|
|
|
this._context = context;
|
|
|
|
|
|
this._hostingEnvironment = hostingEnvironment;
|
|
|
|
|
|
this._configuration = configuration;
|
|
|
|
|
|
this._profileService = profileService;
|
|
|
|
|
|
this._minioService = minioService;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region " Methods "
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// แสดงประวัติการรับราชการแบบย่อ
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="id">รหัสข้อมูลข้าราชการ</param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
/// <response code="200">เมื่อแสดงรายงานสำเร็จ</response>
|
|
|
|
|
|
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
|
|
|
|
|
|
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
|
|
|
|
|
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
|
|
|
|
|
|
|
|
|
|
|
[HttpGet("kp7-short/{id:length(36)}")]
|
|
|
|
|
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
|
|
|
|
|
[ProducesResponseType(StatusCodes.Status400BadRequest)]
|
|
|
|
|
|
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
|
|
|
|
|
|
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
|
|
|
|
|
|
public async Task<ActionResult<ResponseObject>> GetKp7ShortReport(Guid id)
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
var profile_salaries = (from ps in _context.ProfileSalaries
|
|
|
|
|
|
join pos in _context.PositionPaths
|
|
|
|
|
|
on ps.PositionId equals pos.Id
|
|
|
|
|
|
where ps.Profile.Id == id
|
|
|
|
|
|
select new
|
|
|
|
|
|
{
|
|
|
|
|
|
ProfileId = ps.Profile.Id,
|
|
|
|
|
|
PositionName = pos.Name,
|
|
|
|
|
|
ps.OcId,
|
|
|
|
|
|
SalaryDateAnnounce = ps.Date,
|
|
|
|
|
|
ps.Amount,
|
|
|
|
|
|
ps.PositionSalaryAmount
|
|
|
|
|
|
}).ToList();
|
|
|
|
|
|
|
|
|
|
|
|
var profiles = _context.Profiles.AsQueryable()
|
|
|
|
|
|
.Include(x => x.Avatar)
|
|
|
|
|
|
.Include(x => x.Salaries)
|
|
|
|
|
|
.Include(x => x.Educations)
|
|
|
|
|
|
.ToList();
|
|
|
|
|
|
var prefixes = _context.Prefixes.ToList();
|
|
|
|
|
|
var profile = (from p in profiles
|
|
|
|
|
|
join pf in prefixes on p.PrefixId equals pf.Id
|
|
|
|
|
|
where p.Id == id
|
|
|
|
|
|
select new
|
|
|
|
|
|
{
|
|
|
|
|
|
CitizenId = p.CitizenId,
|
|
|
|
|
|
Prefix = pf.Name,
|
|
|
|
|
|
p.FirstName,
|
|
|
|
|
|
p.LastName,
|
|
|
|
|
|
DateOfBirth = p.BirthDate.ToThaiShortDate(),
|
2023-06-30 14:21:27 +07:00
|
|
|
|
DateRetire = p.BirthDate.CalculateRetireDate().ToThaiShortDate(),
|
2023-05-30 10:11:40 +07:00
|
|
|
|
RegistrationAddress = p.RegistrationAddress,
|
|
|
|
|
|
RegistrationProvince = _context.Provinces.AsQueryable().FirstOrDefault(x => x.Id == p.RegistrationProvinceId)?.Name,
|
|
|
|
|
|
RegistrationDistrict = _context.Districts.AsQueryable().FirstOrDefault(x => x.Id == p.RegistrationDistrictId)?.Name,
|
|
|
|
|
|
RegistrationSubDistrict = _context.SubDistricts.AsQueryable().FirstOrDefault(x => x.Id == p.RegistrationSubDistrictId)?.Name,
|
|
|
|
|
|
RegistrationZipCode = p.RegistrationZipCode,
|
|
|
|
|
|
OcFullPath = _profileService.GetOrganizationNameFullPath(p.OcId.Value, false, false),
|
|
|
|
|
|
DateAppoint = p.DateAppoint == null ? "" : p.DateAppoint.Value.ToThaiShortDate(),
|
|
|
|
|
|
Salaries = profile_salaries,
|
|
|
|
|
|
SalaryAmount = p.Salaries.Count == 0 ? "-"
|
|
|
|
|
|
: $"{p.Salaries.OrderByDescending(s => s.Date.Value).FirstOrDefault().Amount.Value.ToString("#,##0")}",
|
|
|
|
|
|
Education = p.Educations.Count == 0 ? "-"
|
|
|
|
|
|
: $"{p.Educations.OrderByDescending(e => e.EndDate.Value.Year).FirstOrDefault().Degree} {p.Educations.OrderByDescending(e => e.EndDate.Value.Year).FirstOrDefault().Field}",
|
|
|
|
|
|
AvatarId = p.Avatar == null ? "" : p.Avatar.Id.ToString("D")
|
|
|
|
|
|
}).FirstOrDefault();
|
|
|
|
|
|
// _context.PositionPaths.AsQueryable().FirstOrDefault(x => x.Id == p.PositionId)?.Name,
|
|
|
|
|
|
|
|
|
|
|
|
var data = new List<dynamic>();
|
|
|
|
|
|
var c = 1;
|
|
|
|
|
|
if (profile.Salaries.Count == 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
var ret2 = new
|
|
|
|
|
|
{
|
|
|
|
|
|
CitizenId = profile.CitizenId,
|
|
|
|
|
|
Prefix = profile.Prefix,
|
|
|
|
|
|
FirstName = profile.FirstName,
|
|
|
|
|
|
LastName = profile.LastName,
|
|
|
|
|
|
DateOfBirth = profile.DateOfBirth,
|
2023-06-30 14:21:27 +07:00
|
|
|
|
DateRetire = profile.DateRetire,
|
2023-05-30 10:11:40 +07:00
|
|
|
|
RegistrationAddress = $"{profile.RegistrationAddress}\r\nตำบล/แขวง {profile.RegistrationSubDistrict}\r\nเขต/อำเภอ {profile.RegistrationDistrict}\r\nจังหวัด {profile.RegistrationProvince} รหัสไปรษณีย์ {profile.RegistrationZipCode}",
|
|
|
|
|
|
SalaryAmount = profile.SalaryAmount,
|
|
|
|
|
|
Education = profile.Education,
|
|
|
|
|
|
AppointText = "",
|
|
|
|
|
|
SalaryDate = profile.DateAppoint,
|
|
|
|
|
|
PositionName = "",
|
|
|
|
|
|
OCFullPath = profile.OcFullPath
|
|
|
|
|
|
};
|
|
|
|
|
|
data.Add(ret2);
|
|
|
|
|
|
}
|
|
|
|
|
|
var old_date = DateTime.Now;
|
|
|
|
|
|
var old_position = "";
|
|
|
|
|
|
var old_ocid = Guid.NewGuid();
|
|
|
|
|
|
dynamic ret;
|
|
|
|
|
|
|
2023-07-06 10:30:32 +07:00
|
|
|
|
//for (int i = 0; i <= 20; i++)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// var s = profile.Salaries[0];
|
|
|
|
|
|
// old_date = s.SalaryDateAnnounce.Value;
|
|
|
|
|
|
// old_position = s.PositionName;
|
|
|
|
|
|
// old_ocid = s.OcId.Value;
|
|
|
|
|
|
// ret = new
|
|
|
|
|
|
// {
|
|
|
|
|
|
// CitizenId = profile.CitizenId,
|
|
|
|
|
|
// Prefix = profile.Prefix,
|
|
|
|
|
|
// FirstName = profile.FirstName,
|
|
|
|
|
|
// LastName = profile.LastName,
|
|
|
|
|
|
// DateOfBirth = profile.DateOfBirth,
|
|
|
|
|
|
// DateRetire = profile.DateRetire,
|
|
|
|
|
|
// RegistrationAddress = $"{profile.RegistrationAddress}\r\nตำบล/แขวง {profile.RegistrationSubDistrict}\r\nเขต/อำเภอ {profile.RegistrationDistrict}\r\nจังหวัด {profile.RegistrationProvince} รหัสไปรษณีย์ {profile.RegistrationZipCode}",
|
|
|
|
|
|
// SalaryAmount = profile.SalaryAmount,
|
|
|
|
|
|
// Education = profile.Education,
|
|
|
|
|
|
// AppointText = c == 1 ? "(เริ่มรับราชการ)" : "",
|
|
|
|
|
|
// SalaryDate = s.SalaryDateAnnounce.Value.ToThaiShortDate(),
|
|
|
|
|
|
// PositionName = s.PositionName,
|
|
|
|
|
|
// OCFullPath = _profileService.GetOrganizationNameFullPath(s.OcId.Value, false, false)
|
|
|
|
|
|
// };
|
|
|
|
|
|
// data.Add(ret);
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
2023-05-30 10:11:40 +07:00
|
|
|
|
foreach (var s in profile.Salaries)
|
|
|
|
|
|
{
|
|
|
|
|
|
//if((old_date.Date != s.SalaryDateAnnounce.Value.Date))
|
|
|
|
|
|
//{
|
|
|
|
|
|
// old_date = s.SalaryDateAnnounce.Value;
|
|
|
|
|
|
// old_position= s.PositionName;
|
|
|
|
|
|
// old_ocid = s.OcId;
|
|
|
|
|
|
|
|
|
|
|
|
// ret = new
|
|
|
|
|
|
// {
|
|
|
|
|
|
// CitizenId = profile.CitizenId,
|
|
|
|
|
|
// Prefix = profile.Prefix,
|
|
|
|
|
|
// FirstName = profile.FirstName,
|
|
|
|
|
|
// LastName = profile.LastName,
|
|
|
|
|
|
// DateOfBirth = profile.DateOfBirth,
|
|
|
|
|
|
// RegistrationAddress = profile.RegistrationAddress,
|
|
|
|
|
|
// SalaryAmount = profile.SalaryAmount,
|
|
|
|
|
|
// Education = profile.Education,
|
|
|
|
|
|
// AppointText = c == 1 ? "(เริ่มรับราชการ)" : "",
|
|
|
|
|
|
// SalaryDate = s.SalaryDateAnnounce.Value.ToThaiShortDate(),
|
|
|
|
|
|
// PositionName = s.PositionName,
|
|
|
|
|
|
// OCFullPath = CoreCommandReport.GetOrganizationNameFullPath(s.OcId, false, false)
|
|
|
|
|
|
// };
|
|
|
|
|
|
// data.Add(ret);
|
|
|
|
|
|
//}
|
|
|
|
|
|
if (old_position != s.PositionName)
|
|
|
|
|
|
{
|
|
|
|
|
|
old_date = s.SalaryDateAnnounce.Value;
|
|
|
|
|
|
old_position = s.PositionName;
|
|
|
|
|
|
old_ocid = s.OcId.Value;
|
|
|
|
|
|
ret = new
|
|
|
|
|
|
{
|
|
|
|
|
|
CitizenId = profile.CitizenId,
|
|
|
|
|
|
Prefix = profile.Prefix,
|
|
|
|
|
|
FirstName = profile.FirstName,
|
|
|
|
|
|
LastName = profile.LastName,
|
|
|
|
|
|
DateOfBirth = profile.DateOfBirth,
|
2023-06-30 14:21:27 +07:00
|
|
|
|
DateRetire = profile.DateRetire,
|
2023-05-30 10:11:40 +07:00
|
|
|
|
RegistrationAddress = $"{profile.RegistrationAddress}\r\nตำบล/แขวง {profile.RegistrationSubDistrict}\r\nเขต/อำเภอ {profile.RegistrationDistrict}\r\nจังหวัด {profile.RegistrationProvince} รหัสไปรษณีย์ {profile.RegistrationZipCode}",
|
|
|
|
|
|
SalaryAmount = profile.SalaryAmount,
|
|
|
|
|
|
Education = profile.Education,
|
|
|
|
|
|
AppointText = c == 1 ? "(เริ่มรับราชการ)" : "",
|
|
|
|
|
|
SalaryDate = s.SalaryDateAnnounce.Value.ToThaiShortDate(),
|
|
|
|
|
|
PositionName = s.PositionName,
|
|
|
|
|
|
OCFullPath = _profileService.GetOrganizationNameFullPath(s.OcId.Value, false, false)
|
|
|
|
|
|
};
|
|
|
|
|
|
data.Add(ret);
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (old_ocid != s.OcId)
|
|
|
|
|
|
{
|
|
|
|
|
|
old_date = s.SalaryDateAnnounce.Value;
|
|
|
|
|
|
old_position = s.PositionName;
|
|
|
|
|
|
old_ocid = s.OcId.Value;
|
|
|
|
|
|
ret = new
|
|
|
|
|
|
{
|
|
|
|
|
|
CitizenId = profile.CitizenId,
|
|
|
|
|
|
Prefix = profile.Prefix,
|
|
|
|
|
|
FirstName = profile.FirstName,
|
|
|
|
|
|
LastName = profile.LastName,
|
|
|
|
|
|
DateOfBirth = profile.DateOfBirth,
|
2023-06-30 14:21:27 +07:00
|
|
|
|
DateRetire = profile.DateRetire,
|
2023-05-30 10:11:40 +07:00
|
|
|
|
RegistrationAddress = $"{profile.RegistrationAddress}\r\nตำบล/แขวง {profile.RegistrationSubDistrict}\r\nเขต/อำเภอ {profile.RegistrationDistrict}\r\nจังหวัด {profile.RegistrationProvince} รหัสไปรษณีย์ {profile.RegistrationZipCode}",
|
|
|
|
|
|
SalaryAmount = profile.SalaryAmount,
|
|
|
|
|
|
Education = profile.Education,
|
|
|
|
|
|
AppointText = c == 1 ? "(เริ่มรับราชการ)" : "",
|
|
|
|
|
|
SalaryDate = s.SalaryDateAnnounce.Value.ToThaiShortDate(),
|
|
|
|
|
|
PositionName = s.PositionName,
|
|
|
|
|
|
OCFullPath = _profileService.GetOrganizationNameFullPath(s.OcId.Value, false, false),
|
|
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
data.Add(ret);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
c++;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var rptFile = Path.Combine(_hostingEnvironment.ContentRootPath, "Report", "Profile", $"rptShortKp7.trdp");
|
|
|
|
|
|
|
|
|
|
|
|
ReportPackager reportPackager = new ReportPackager();
|
|
|
|
|
|
Telerik.Reporting.Report? report = null;
|
|
|
|
|
|
using (var sourceStream = System.IO.File.OpenRead(rptFile))
|
|
|
|
|
|
{
|
|
|
|
|
|
report = (Telerik.Reporting.Report)reportPackager.UnpackageDocument(sourceStream);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
report.DataSource = data;
|
|
|
|
|
|
|
|
|
|
|
|
if (profile.AvatarId != "")
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
// Get avatar Image
|
|
|
|
|
|
var picContent = (await _minioService.DownloadFileAsync(Guid.Parse(profile.AvatarId))).FileContent;
|
|
|
|
|
|
var pictureBox = (Telerik.Reporting.PictureBox)report.Items["groupHeaderSection"].Items["picAvatar"];
|
|
|
|
|
|
pictureBox.Value = Image.FromStream(new MemoryStream(picContent));
|
|
|
|
|
|
}
|
|
|
|
|
|
catch { }
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
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", $"ประวัติการรับราชการอย่างย่อ_{profile.CitizenId}.pdf");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
|
|
|
|
|
return Error(ex, "ไม่สามารถแสดงผลรายงานได้!!!");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// แสดงรายงาน กก.1
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="id">รหัสข้อมูลข้าราชการ</param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
/// <response code="200">เมื่อแสดงรายงานสำเร็จ</response>
|
|
|
|
|
|
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
|
|
|
|
|
|
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
|
|
|
|
|
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
|
|
|
|
|
[HttpGet("kk1/{id:length(36)}")]
|
|
|
|
|
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
|
|
|
|
|
[ProducesResponseType(StatusCodes.Status400BadRequest)]
|
|
|
|
|
|
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
|
|
|
|
|
|
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
|
|
|
|
|
|
public async Task<ActionResult<ResponseObject>> GetKK1Report(Guid id)
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
var profile = (from p in _context.Profiles
|
|
|
|
|
|
join pf in _context.Prefixes on p.PrefixId equals pf.Id into p_pf_join
|
|
|
|
|
|
from p_pf in p_pf_join.DefaultIfEmpty()
|
|
|
|
|
|
join cpf in _context.Prefixes on p.CouplePrefixId equals cpf.Id into c_pf_join
|
|
|
|
|
|
from c_pf in c_pf_join.DefaultIfEmpty()
|
|
|
|
|
|
join fpf in _context.Prefixes on p.FatherPrefixId equals fpf.Id into f_pf_join
|
|
|
|
|
|
from f_pf in f_pf_join.DefaultIfEmpty()
|
|
|
|
|
|
join mpf in _context.Prefixes on p.MotherPrefixId equals mpf.Id into m_pf_join
|
|
|
|
|
|
from m_pf in m_pf_join.DefaultIfEmpty()
|
|
|
|
|
|
where p.Id == id
|
|
|
|
|
|
select new
|
|
|
|
|
|
{
|
|
|
|
|
|
p.CitizenId,
|
|
|
|
|
|
Prefix = p_pf == null ? "" : p_pf.Name,
|
|
|
|
|
|
p.FirstName,
|
|
|
|
|
|
p.LastName,
|
|
|
|
|
|
FullName = $"{p.FirstName} {p.LastName}",
|
|
|
|
|
|
BirthDay = p.BirthDate.Day,
|
|
|
|
|
|
BirthDayText = Convert.ToDecimal(p.BirthDate.Day).ThaiBahtText(UsesEt.Always, GreatFriends.ThaiBahtText.Unit.Baht, 2, false).Replace("บาท", ""),
|
|
|
|
|
|
BirthMonth = p.BirthDate.Month.ToThaiMonth(),
|
|
|
|
|
|
BirthYear = p.BirthDate.Year.ToThaiYear(),
|
|
|
|
|
|
BirthYearText = Convert.ToDecimal(p.BirthDate.Year.ToThaiYear()).ThaiBahtText(UsesEt.Always, GreatFriends.ThaiBahtText.Unit.Baht, 2, false).Replace("บาท", ""),
|
|
|
|
|
|
Address = "",
|
|
|
|
|
|
District = "",
|
|
|
|
|
|
Area = "",
|
|
|
|
|
|
Province = "",
|
|
|
|
|
|
Telephone = p.TelephoneNumber,
|
2024-02-03 13:45:31 +07:00
|
|
|
|
CoupleLastNameOld = p == null ? "" : p.CoupleLastNameOld,
|
2023-05-30 10:11:40 +07:00
|
|
|
|
CouplePrefix = c_pf == null ? "" : c_pf.Name,
|
|
|
|
|
|
CoupleFullName = $"{p.CoupleFirstName} {p.CoupleLastName}".Trim(),
|
|
|
|
|
|
FatherPrefix = f_pf == null ? "" : f_pf.Name,
|
|
|
|
|
|
FatherFullName = $"{p.FatherFirstName} {p.FatherLastName}".Trim(),
|
|
|
|
|
|
MotherPrefix = m_pf == null ? "" : m_pf.Name,
|
|
|
|
|
|
MotherFullName = $"{p.MotherFirstName} {p.MotherLastName}".Trim(),
|
|
|
|
|
|
OcId = p.OcId,
|
|
|
|
|
|
OcFullPath = _profileService.GetOrganizationNameFullPath(p.OcId.Value, false, false),
|
|
|
|
|
|
Division = "",
|
|
|
|
|
|
Institute = "",
|
|
|
|
|
|
StartDate = p.DateStart == null ? "" : p.DateStart.Value.ToThaiShortDate(),
|
|
|
|
|
|
AppointDate = p.DateAppoint == null ? "" : p.DateAppoint.Value.ToThaiShortDate(),
|
|
|
|
|
|
BirthDate = p.BirthDate.ToThaiShortDate(),
|
|
|
|
|
|
RetireDate = p.BirthDate.CalculateRetireDate().ToThaiShortDate(),
|
|
|
|
|
|
AvatarId = p.Avatar == null ? "" : p.Avatar.Id.ToString("D")
|
|
|
|
|
|
}).ToList();
|
|
|
|
|
|
|
|
|
|
|
|
if (!profile.Any())
|
|
|
|
|
|
return Error(GlobalMessages.DataNotFound, StatusCodes.Status404NotFound);
|
|
|
|
|
|
|
|
|
|
|
|
// certificate
|
|
|
|
|
|
var cert = (from c in _context.ProfileCertificates.AsQueryable()
|
|
|
|
|
|
where c.Profile.Id == id
|
|
|
|
|
|
orderby c.IssueDate.Value.Year
|
|
|
|
|
|
select new
|
|
|
|
|
|
{
|
|
|
|
|
|
c.CertificateType,
|
|
|
|
|
|
c.Issuer,
|
|
|
|
|
|
c.CertificateNo,
|
|
|
|
|
|
IssueDate = c.IssueDate == null ? "" : c.IssueDate.Value.ToThaiShortDate()
|
|
|
|
|
|
}).ToList();
|
|
|
|
|
|
|
|
|
|
|
|
// add temp rows
|
|
|
|
|
|
while (cert.Count < 3)
|
|
|
|
|
|
{
|
|
|
|
|
|
cert.Add(new
|
|
|
|
|
|
{
|
|
|
|
|
|
CertificateType = "",
|
|
|
|
|
|
Issuer = "",
|
|
|
|
|
|
CertificateNo = "",
|
|
|
|
|
|
IssueDate = ""
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// training
|
|
|
|
|
|
var training = (from t in _context.ProfileTrainings.AsQueryable()
|
|
|
|
|
|
where t.Profile.Id == id
|
|
|
|
|
|
orderby t.StartDate.Value.Year
|
|
|
|
|
|
select new
|
|
|
|
|
|
{
|
|
|
|
|
|
Institute = t.Department,
|
|
|
|
|
|
Start = t.StartDate == null ? "" : t.StartDate.Value.Year.ToThaiYear().ToString(),
|
|
|
|
|
|
End = t.EndDate == null ? "" : t.EndDate.Value.Year.ToThaiYear().ToString(),
|
|
|
|
|
|
Level = "",
|
|
|
|
|
|
Degree = t.Name,
|
|
|
|
|
|
Field = ""
|
|
|
|
|
|
}).ToList();
|
|
|
|
|
|
|
|
|
|
|
|
while (training.Count < 3)
|
|
|
|
|
|
{
|
|
|
|
|
|
training.Add(new
|
|
|
|
|
|
{
|
|
|
|
|
|
Institute = "",
|
|
|
|
|
|
Start = "",
|
|
|
|
|
|
End = "",
|
|
|
|
|
|
Level = "",
|
|
|
|
|
|
Degree = "",
|
|
|
|
|
|
Field = ""
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// disciplines
|
|
|
|
|
|
var discipline = (from d in _context.ProfileDisciplines.AsQueryable()
|
|
|
|
|
|
where d.Profile.Id == id
|
|
|
|
|
|
orderby d.Date.Value.Year
|
|
|
|
|
|
select new
|
|
|
|
|
|
{
|
|
|
|
|
|
DisciplineYear = d.Date == null ? "" : d.Date.Value.Year.ToThaiYear().ToString(),
|
|
|
|
|
|
DisciplineDetail = d.Detail,
|
|
|
|
|
|
RefNo = d.RefCommandNo
|
|
|
|
|
|
}).ToList();
|
|
|
|
|
|
|
|
|
|
|
|
while (discipline.Count < 3)
|
|
|
|
|
|
{
|
|
|
|
|
|
discipline.Add(new
|
|
|
|
|
|
{
|
|
|
|
|
|
DisciplineYear = "",
|
|
|
|
|
|
DisciplineDetail = "",
|
|
|
|
|
|
RefNo = ""
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// education
|
|
|
|
|
|
var education = (from e in _context.ProfileEducations.AsQueryable()
|
|
|
|
|
|
where e.Profile.Id == id
|
|
|
|
|
|
orderby e.StartDate.Value.Year
|
|
|
|
|
|
select new
|
|
|
|
|
|
{
|
|
|
|
|
|
Institute = e.Institute,
|
|
|
|
|
|
Start = e.StartDate == null ? "" : e.StartDate.Value.Year.ToThaiYear().ToString(),
|
|
|
|
|
|
End = e.EndDate == null ? "" : e.EndDate.Value.Year.ToThaiYear().ToString(),
|
|
|
|
|
|
Level = e.EducationLevel,
|
|
|
|
|
|
Degree = e.Degree,
|
|
|
|
|
|
Field = e.Field.Trim() == "-" ? "" : e.Field
|
|
|
|
|
|
}).ToList();
|
|
|
|
|
|
|
|
|
|
|
|
while (education.Count < 4)
|
|
|
|
|
|
{
|
|
|
|
|
|
education.Add(new
|
|
|
|
|
|
{
|
|
|
|
|
|
Institute = "",
|
|
|
|
|
|
Start = "",
|
|
|
|
|
|
End = "",
|
|
|
|
|
|
Level = "",
|
|
|
|
|
|
Degree = "",
|
|
|
|
|
|
Field = ""
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var rptFile = Path.Combine(_hostingEnvironment.ContentRootPath, "Report", "Profile", $"rptKK1_Page1.trdp");
|
|
|
|
|
|
|
|
|
|
|
|
ReportPackager reportPackager = new ReportPackager();
|
|
|
|
|
|
Telerik.Reporting.Report? report = null;
|
|
|
|
|
|
using (var sourceStream = System.IO.File.OpenRead(rptFile))
|
|
|
|
|
|
{
|
|
|
|
|
|
report = (Telerik.Reporting.Report)reportPackager.UnpackageDocument(sourceStream);
|
|
|
|
|
|
}
|
|
|
|
|
|
report.DataSource = profile;
|
|
|
|
|
|
|
|
|
|
|
|
// binding to table
|
|
|
|
|
|
var tblCertificate = (Telerik.Reporting.Table)report.Items["detailSection1"].Items["tblCertificate"];
|
|
|
|
|
|
tblCertificate.DataSource = cert;
|
|
|
|
|
|
|
|
|
|
|
|
var tblTraining = (Telerik.Reporting.Table)report.Items["detailSection1"].Items["tblTraining"];
|
|
|
|
|
|
tblTraining.DataSource = training;
|
|
|
|
|
|
|
|
|
|
|
|
var tblDiscipline = (Telerik.Reporting.Table)report.Items["detailSection1"].Items["tblDiscipline"];
|
|
|
|
|
|
tblDiscipline.DataSource = discipline;
|
|
|
|
|
|
|
|
|
|
|
|
var tblEducation = (Telerik.Reporting.Table)report.Items["detailSection1"].Items["tblEducation"];
|
|
|
|
|
|
tblEducation.DataSource = education;
|
|
|
|
|
|
|
|
|
|
|
|
if (profile.First().AvatarId != "")
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
// Get avatar Image
|
|
|
|
|
|
var picContent = (await _minioService.DownloadFileAsync(Guid.Parse(profile.First().AvatarId))).FileContent;
|
|
|
|
|
|
var pictureBox = (Telerik.Reporting.PictureBox)report.Items["pageFooterSection1"].Items["picAvatar"];
|
|
|
|
|
|
pictureBox.Value = Image.FromStream(new MemoryStream(picContent));
|
|
|
|
|
|
}
|
|
|
|
|
|
catch { }
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
|
|
// byte array waiting for merge pdf
|
|
|
|
|
|
var content = result.DocumentBytes;
|
|
|
|
|
|
|
|
|
|
|
|
// page2
|
|
|
|
|
|
var profile2 = (from p in _context.Profiles
|
|
|
|
|
|
join pf in _context.Prefixes on p.PrefixId equals pf.Id
|
|
|
|
|
|
where p.Id == id
|
|
|
|
|
|
select new
|
|
|
|
|
|
{
|
|
|
|
|
|
FullName = $"{pf.Name}{p.FirstName} {p.LastName}",
|
|
|
|
|
|
OcFullPath = _profileService.GetOrganizationNameFullPath(p.OcId.Value, false, false),
|
|
|
|
|
|
}).FirstOrDefault();
|
|
|
|
|
|
|
2023-10-17 10:22:46 +07:00
|
|
|
|
var salary = (from s in _context.ProfileSalaries
|
|
|
|
|
|
.Include(x => x.PositionLevel)
|
|
|
|
|
|
join pos in _context.PositionPaths.AsQueryable()
|
|
|
|
|
|
on s.PositionId equals pos.Id
|
2023-05-30 10:11:40 +07:00
|
|
|
|
join pos_no in _context.PositionNumbers on s.PosNoId equals pos_no.Id
|
2023-09-05 11:38:43 +07:00
|
|
|
|
// join pos_lv in _context.PositionLevels on s.PositionLevelId equals pos_lv.Id
|
2023-05-30 10:11:40 +07:00
|
|
|
|
join pos_type in _context.PositionTypes on s.PositionTypeId equals pos_type.Id
|
|
|
|
|
|
where s.Profile.Id == id
|
|
|
|
|
|
orderby s.Date.Value
|
|
|
|
|
|
select new
|
|
|
|
|
|
{
|
|
|
|
|
|
SalaryDate = s.Date == null ? "" : s.Date == new DateTime(1, 1, 1) ? "" : s.Date.Value.ToThaiShortDate(),
|
2023-10-17 10:22:46 +07:00
|
|
|
|
Position = $"{pos.Name} ประเภท{pos_type.Name} ระดับ{s.PositionLevel.Name}",
|
2023-05-30 10:11:40 +07:00
|
|
|
|
PosNo = pos_no.Name,
|
2023-09-05 11:38:43 +07:00
|
|
|
|
Rank = s.PositionLevel == null ? null : s.PositionLevel.Name,
|
2023-10-17 10:22:46 +07:00
|
|
|
|
Salary = s.Amount == null ? "" : s.Amount == 0 ? "-" : s.Amount.ToString().ToInteger().ToNumericText(),
|
2023-05-30 10:11:40 +07:00
|
|
|
|
RefAll = s.SalaryRef,
|
|
|
|
|
|
PositionType = pos_type.Name,
|
2023-09-05 11:38:43 +07:00
|
|
|
|
PositionLevel = s.PositionLevel == null ? null : s.PositionLevel.Name,
|
2023-10-17 10:22:46 +07:00
|
|
|
|
PositionAmount = s.PositionSalaryAmount == null ? "" : s.PositionSalaryAmount.Value == 0 ? "-" : s.PositionSalaryAmount.Value.ToString().ToInteger().ToNumericText(),
|
2023-05-30 10:11:40 +07:00
|
|
|
|
FullName = profile2.FullName,
|
|
|
|
|
|
OcFullPath = profile2.OcFullPath
|
|
|
|
|
|
}).ToList();
|
|
|
|
|
|
|
|
|
|
|
|
//while (salary.Count < 60)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// salary.Add(new
|
|
|
|
|
|
// {
|
|
|
|
|
|
// SalaryDate = "",
|
|
|
|
|
|
// Position = "",
|
|
|
|
|
|
// PosNo = "",
|
|
|
|
|
|
// Rank = "",
|
|
|
|
|
|
// Salary = "",
|
|
|
|
|
|
// RefAll = "",
|
|
|
|
|
|
// PositionType = "",
|
|
|
|
|
|
// PositionLevel = "",
|
|
|
|
|
|
// PositionAmount = "",
|
|
|
|
|
|
// FullName = profile2.FullName,
|
|
|
|
|
|
// OcFullPath = profile2.OcFullPath
|
|
|
|
|
|
// });
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
var rptFile2 = Path.Combine(_hostingEnvironment.ContentRootPath, "Report", "Profile", $"rptKK1_Page2.trdp");
|
|
|
|
|
|
|
|
|
|
|
|
ReportPackager reportPackager2 = new ReportPackager();
|
|
|
|
|
|
Telerik.Reporting.Report? report2 = null;
|
|
|
|
|
|
using (var sourceStream = System.IO.File.OpenRead(rptFile2))
|
|
|
|
|
|
{
|
|
|
|
|
|
report2 = (Telerik.Reporting.Report)reportPackager.UnpackageDocument(sourceStream);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
report2.ReportParameters["FullName"].Value = profile2.FullName;
|
|
|
|
|
|
report2.ReportParameters["OcFullPath"].Value = profile2.OcFullPath;
|
|
|
|
|
|
|
|
|
|
|
|
// binding to table
|
|
|
|
|
|
var tblSalary = (Telerik.Reporting.Table)report2.Items["detailSection1"].Items["tblSalary"];
|
|
|
|
|
|
tblSalary.DataSource = salary;
|
|
|
|
|
|
|
|
|
|
|
|
System.Collections.Hashtable deviceInfo2 = new System.Collections.Hashtable();
|
|
|
|
|
|
|
|
|
|
|
|
InstanceReportSource instanceReportSource2 = new InstanceReportSource()
|
|
|
|
|
|
{
|
|
|
|
|
|
ReportDocument = report2
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ReportProcessor reportProcessor2 = new ReportProcessor(_configuration);
|
|
|
|
|
|
RenderingResult result2 = reportProcessor2.RenderReport("PDF", instanceReportSource2, deviceInfo2);
|
|
|
|
|
|
|
|
|
|
|
|
// byte array waiting for merge pdf
|
|
|
|
|
|
var content2 = result2.DocumentBytes;
|
|
|
|
|
|
|
|
|
|
|
|
// merge pdf
|
|
|
|
|
|
using (MemoryStream ms = new MemoryStream())
|
|
|
|
|
|
{
|
|
|
|
|
|
using (PdfDocument pdf = new PdfDocument(new PdfWriter(ms).SetSmartMode(true)))
|
|
|
|
|
|
{
|
|
|
|
|
|
// Create reader from bytes
|
|
|
|
|
|
using (MemoryStream memoryStream = new MemoryStream(content))
|
|
|
|
|
|
{
|
|
|
|
|
|
// Create reader from bytes
|
|
|
|
|
|
using (PdfReader reader = new PdfReader(memoryStream))
|
|
|
|
|
|
{
|
|
|
|
|
|
PdfDocument srcDoc = new PdfDocument(reader);
|
|
|
|
|
|
srcDoc.CopyPagesTo(1, srcDoc.GetNumberOfPages(), pdf);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Create reader from bytes
|
|
|
|
|
|
if (content2 != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
using (MemoryStream memoryStream = new MemoryStream(content2))
|
|
|
|
|
|
{
|
|
|
|
|
|
// Create reader from bytes
|
|
|
|
|
|
using (PdfReader reader = new PdfReader(memoryStream))
|
|
|
|
|
|
{
|
|
|
|
|
|
PdfDocument srcDoc = new PdfDocument(reader);
|
|
|
|
|
|
srcDoc.CopyPagesTo(1, srcDoc.GetNumberOfPages(), pdf);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
pdf.Close();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var fileContent = ms.ToArray();
|
|
|
|
|
|
return File(fileContent, "application/pdf", $"กก_1_{id}.pdf");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
|
|
|
|
|
return Error(ex);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// แสดงรายงาน กพ.7
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="id">รหัสข้อมูลข้าราชการ</param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
/// <response code="200">เมื่อแสดงรายงานสำเร็จ</response>
|
|
|
|
|
|
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
|
|
|
|
|
|
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
|
|
|
|
|
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
|
|
|
|
|
[HttpGet("kp7/{id:length(36)}")]
|
|
|
|
|
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
|
|
|
|
|
[ProducesResponseType(StatusCodes.Status400BadRequest)]
|
|
|
|
|
|
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
|
|
|
|
|
|
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
|
|
|
|
|
|
public async Task<ActionResult<ResponseObject>> GetKP7Report(Guid id)
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
var profile = (from p in _context.Profiles
|
|
|
|
|
|
join pf in _context.Prefixes on p.PrefixId equals pf.Id into p_pf_join
|
|
|
|
|
|
from p_pf in p_pf_join.DefaultIfEmpty()
|
|
|
|
|
|
join cpf in _context.Prefixes on p.CouplePrefixId equals cpf.Id into c_pf_join
|
|
|
|
|
|
from c_pf in c_pf_join.DefaultIfEmpty()
|
|
|
|
|
|
join fpf in _context.Prefixes on p.FatherPrefixId equals fpf.Id into f_pf_join
|
|
|
|
|
|
from f_pf in f_pf_join.DefaultIfEmpty()
|
|
|
|
|
|
join mpf in _context.Prefixes on p.MotherPrefixId equals mpf.Id into m_pf_join
|
|
|
|
|
|
from m_pf in m_pf_join.DefaultIfEmpty()
|
|
|
|
|
|
where p.Id == id
|
|
|
|
|
|
select new
|
|
|
|
|
|
{
|
|
|
|
|
|
p.CitizenId,
|
|
|
|
|
|
Prefix = p_pf == null ? "" : p_pf.Name,
|
|
|
|
|
|
p.FirstName,
|
|
|
|
|
|
p.LastName,
|
|
|
|
|
|
FullName = $"{p.FirstName} {p.LastName}",
|
|
|
|
|
|
BirthDay = p.BirthDate.Day,
|
|
|
|
|
|
BirthDayText = Convert.ToDecimal(p.BirthDate.Day).ThaiBahtText(UsesEt.Always, GreatFriends.ThaiBahtText.Unit.Baht, 2, false).Replace("บาท", ""),
|
|
|
|
|
|
BirthMonth = p.BirthDate.Month.ToThaiMonth(),
|
|
|
|
|
|
BirthYear = p.BirthDate.Year.ToThaiYear(),
|
|
|
|
|
|
BirthYearText = Convert.ToDecimal(p.BirthDate.Year.ToThaiYear()).ThaiBahtText(UsesEt.Always, GreatFriends.ThaiBahtText.Unit.Baht, 2, false).Replace("บาท", ""),
|
|
|
|
|
|
Address = "",
|
|
|
|
|
|
District = "",
|
|
|
|
|
|
Area = "",
|
|
|
|
|
|
Province = "",
|
|
|
|
|
|
Telephone = p.TelephoneNumber,
|
|
|
|
|
|
CouplePrefix = c_pf == null ? "" : c_pf.Name,
|
|
|
|
|
|
CoupleFullName = $"{p.CoupleFirstName} {p.CoupleLastName}".Trim(),
|
|
|
|
|
|
FatherPrefix = f_pf == null ? "" : f_pf.Name,
|
|
|
|
|
|
FatherFullName = $"{p.FatherFirstName} {p.FatherLastName}".Trim(),
|
|
|
|
|
|
MotherPrefix = m_pf == null ? "" : m_pf.Name,
|
|
|
|
|
|
MotherFullName = $"{p.MotherFirstName} {p.MotherLastName}".Trim(),
|
|
|
|
|
|
OcId = p.OcId,
|
|
|
|
|
|
OcFullPath = _profileService.GetOrganizationNameFullPath(p.OcId.Value, false, false),
|
|
|
|
|
|
Division = "",
|
|
|
|
|
|
Institute = "",
|
|
|
|
|
|
StartDate = p.DateStart == null ? "" : p.DateStart.Value.ToThaiShortDate(),
|
|
|
|
|
|
AppointDate = p.DateAppoint == null ? "" : p.DateAppoint.Value.ToThaiShortDate(),
|
|
|
|
|
|
BirthDate = p.BirthDate.ToThaiShortDate(),
|
|
|
|
|
|
RetireDate = p.BirthDate.CalculateRetireDate().ToThaiShortDate(),
|
|
|
|
|
|
AvatarId = p.Avatar == null ? "" : p.Avatar.Id.ToString("D")
|
|
|
|
|
|
}).ToList();
|
|
|
|
|
|
|
|
|
|
|
|
if (!profile.Any())
|
|
|
|
|
|
return Error(GlobalMessages.DataNotFound, StatusCodes.Status404NotFound);
|
|
|
|
|
|
|
|
|
|
|
|
// certificate
|
|
|
|
|
|
var cert = (from c in _context.ProfileCertificates.AsQueryable()
|
|
|
|
|
|
where c.Profile.Id == id
|
|
|
|
|
|
orderby c.IssueDate.Value.Year
|
|
|
|
|
|
select new
|
|
|
|
|
|
{
|
|
|
|
|
|
c.CertificateType,
|
|
|
|
|
|
c.Issuer,
|
|
|
|
|
|
c.CertificateNo,
|
|
|
|
|
|
IssueDate = c.IssueDate == null ? "" : c.IssueDate.Value.ToThaiShortDate()
|
|
|
|
|
|
}).ToList();
|
|
|
|
|
|
|
|
|
|
|
|
// add temp rows
|
|
|
|
|
|
while (cert.Count < 3)
|
|
|
|
|
|
{
|
|
|
|
|
|
cert.Add(new
|
|
|
|
|
|
{
|
|
|
|
|
|
CertificateType = "",
|
|
|
|
|
|
Issuer = "",
|
|
|
|
|
|
CertificateNo = "",
|
|
|
|
|
|
IssueDate = ""
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// training
|
|
|
|
|
|
var training = (from t in _context.ProfileTrainings.AsQueryable()
|
|
|
|
|
|
where t.Profile.Id == id
|
|
|
|
|
|
orderby t.StartDate.Value.Year
|
|
|
|
|
|
select new
|
|
|
|
|
|
{
|
|
|
|
|
|
Institute = t.Department,
|
|
|
|
|
|
Start = t.StartDate == null ? "" : t.StartDate.Value.Year.ToThaiYear().ToString(),
|
|
|
|
|
|
End = t.EndDate == null ? "" : t.EndDate.Value.Year.ToThaiYear().ToString(),
|
|
|
|
|
|
Level = "",
|
|
|
|
|
|
Degree = t.Name,
|
|
|
|
|
|
Field = ""
|
|
|
|
|
|
}).ToList();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// disciplines
|
|
|
|
|
|
var discipline = (from d in _context.ProfileDisciplines.AsQueryable()
|
|
|
|
|
|
where d.Profile.Id == id
|
|
|
|
|
|
orderby d.Date.Value.Year
|
|
|
|
|
|
select new
|
|
|
|
|
|
{
|
|
|
|
|
|
DisciplineYear = d.Date == null ? "" : d.Date.Value.Year.ToThaiYear().ToString(),
|
|
|
|
|
|
DisciplineDetail = d.Detail,
|
|
|
|
|
|
RefNo = d.RefCommandNo
|
|
|
|
|
|
}).ToList();
|
|
|
|
|
|
|
|
|
|
|
|
while (discipline.Count < 3)
|
|
|
|
|
|
{
|
|
|
|
|
|
discipline.Add(new
|
|
|
|
|
|
{
|
|
|
|
|
|
DisciplineYear = "",
|
|
|
|
|
|
DisciplineDetail = "",
|
|
|
|
|
|
RefNo = ""
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// nopaind
|
|
|
|
|
|
var nopaid = (from c in _context.ProfileNopaids.AsQueryable()
|
|
|
|
|
|
where c.Profile.Id == id
|
|
|
|
|
|
orderby c.Date.Value.Year
|
|
|
|
|
|
select new
|
|
|
|
|
|
{
|
|
|
|
|
|
Year = c.Date == null ? "" : c.Date.Value.Year.ToThaiYear().ToString(),
|
|
|
|
|
|
Detail = c.Detail,
|
|
|
|
|
|
RefNo = c.Reference
|
|
|
|
|
|
}).ToList();
|
|
|
|
|
|
|
|
|
|
|
|
while (nopaid.Count < 3)
|
|
|
|
|
|
{
|
|
|
|
|
|
nopaid.Add(new
|
|
|
|
|
|
{
|
|
|
|
|
|
Year = "",
|
|
|
|
|
|
Detail = "",
|
|
|
|
|
|
RefNo = ""
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// education
|
|
|
|
|
|
var education = (from e in _context.ProfileEducations.AsQueryable()
|
|
|
|
|
|
where e.Profile.Id == id
|
|
|
|
|
|
orderby e.StartDate.Value.Year
|
|
|
|
|
|
select new
|
|
|
|
|
|
{
|
|
|
|
|
|
Institute = e.Institute,
|
|
|
|
|
|
Start = e.StartDate == null ? "" : e.StartDate.Value.Year.ToThaiYear().ToString(),
|
|
|
|
|
|
End = e.EndDate == null ? "" : e.EndDate.Value.Year.ToThaiYear().ToString(),
|
|
|
|
|
|
Level = e.EducationLevel,
|
|
|
|
|
|
Degree = e.Degree,
|
|
|
|
|
|
Field = e.Field.Trim() == "-" ? "" : e.Field
|
|
|
|
|
|
}).ToList();
|
|
|
|
|
|
|
|
|
|
|
|
var education_all = education.Union(training).ToList();
|
|
|
|
|
|
|
|
|
|
|
|
while (education_all.Count < 6)
|
|
|
|
|
|
{
|
|
|
|
|
|
education_all.Add(new
|
|
|
|
|
|
{
|
|
|
|
|
|
Institute = "",
|
|
|
|
|
|
Start = "",
|
|
|
|
|
|
End = "",
|
|
|
|
|
|
Level = "",
|
|
|
|
|
|
Degree = "",
|
|
|
|
|
|
Field = ""
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var row = 0;
|
|
|
|
|
|
var education_report = new List<dynamic>();
|
|
|
|
|
|
foreach (var e in education_all)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (row % 2 == 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
var last_row = education_report.Last();
|
|
|
|
|
|
last_row.Institute2 = e.Institute;
|
|
|
|
|
|
last_row.Start2 = e.Start;
|
|
|
|
|
|
last_row.End2 = e.End;
|
|
|
|
|
|
last_row.Level2 = e.Level;
|
|
|
|
|
|
last_row.Degree2 = e.Degree;
|
|
|
|
|
|
last_row.Field2 = e.Field;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
education_report.Add(new
|
|
|
|
|
|
{
|
|
|
|
|
|
Institute1 = e.Institute,
|
|
|
|
|
|
Start1 = e.Start,
|
|
|
|
|
|
End1 = e.End,
|
|
|
|
|
|
Level1 = e.Level,
|
|
|
|
|
|
Degree1 = e.Degree,
|
|
|
|
|
|
Field1 = e.Field,
|
|
|
|
|
|
Institute2 = "",
|
|
|
|
|
|
Start2 = "",
|
|
|
|
|
|
End2 = "",
|
|
|
|
|
|
Level2 = "",
|
|
|
|
|
|
Degree2 = "",
|
|
|
|
|
|
Field2 = ""
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
row++;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var rptFile = Path.Combine(_hostingEnvironment.ContentRootPath, "Report", "Profile", $"rptKP7_Page1.trdp");
|
|
|
|
|
|
|
|
|
|
|
|
ReportPackager reportPackager = new ReportPackager();
|
|
|
|
|
|
Telerik.Reporting.Report? report = null;
|
|
|
|
|
|
using (var sourceStream = System.IO.File.OpenRead(rptFile))
|
|
|
|
|
|
{
|
|
|
|
|
|
report = (Telerik.Reporting.Report)reportPackager.UnpackageDocument(sourceStream);
|
|
|
|
|
|
}
|
|
|
|
|
|
report.DataSource = profile;
|
|
|
|
|
|
|
|
|
|
|
|
var tblNopaid = (Telerik.Reporting.Table)report.Items["detailSection1"].Items["tblNopaid"];
|
|
|
|
|
|
tblNopaid.DataSource = nopaid;
|
|
|
|
|
|
|
|
|
|
|
|
var tblDiscipline = (Telerik.Reporting.Table)report.Items["detailSection1"].Items["tblDiscipline"];
|
|
|
|
|
|
tblDiscipline.DataSource = discipline;
|
|
|
|
|
|
|
|
|
|
|
|
var tblEducation = (Telerik.Reporting.Table)report.Items["detailSection1"].Items["tblEducation"];
|
|
|
|
|
|
tblEducation.DataSource = education_report;
|
|
|
|
|
|
|
|
|
|
|
|
if (profile.First().AvatarId != "")
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
// Get avatar Image
|
|
|
|
|
|
var picContent = (await _minioService.DownloadFileAsync(Guid.Parse(profile.First().AvatarId))).FileContent;
|
|
|
|
|
|
var pictureBox = (Telerik.Reporting.PictureBox)report.Items["pageFooterSection1"].Items["picAvatar"];
|
|
|
|
|
|
pictureBox.Value = Image.FromStream(new MemoryStream(picContent));
|
|
|
|
|
|
}
|
|
|
|
|
|
catch { }
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
|
|
// byte array waiting for merge pdf
|
|
|
|
|
|
var content = result.DocumentBytes;
|
|
|
|
|
|
|
|
|
|
|
|
// page2
|
|
|
|
|
|
var profile2 = (from p in _context.Profiles
|
|
|
|
|
|
join pf in _context.Prefixes on p.PrefixId equals pf.Id
|
|
|
|
|
|
where p.Id == id
|
|
|
|
|
|
select new
|
|
|
|
|
|
{
|
|
|
|
|
|
FullName = $"{pf.Name}{p.FirstName} {p.LastName}",
|
|
|
|
|
|
OcFullPath = _profileService.GetOrganizationNameFullPath(p.OcId.Value, false, false),
|
|
|
|
|
|
}).FirstOrDefault();
|
|
|
|
|
|
|
2023-09-05 11:38:43 +07:00
|
|
|
|
var salary = (from s in _context.ProfileSalaries.Include(x => x.PositionLevel)
|
2023-05-30 10:11:40 +07:00
|
|
|
|
join pos in _context.PositionPaths on s.PositionId equals pos.Id
|
|
|
|
|
|
join pos_no in _context.PositionNumbers on s.PosNoId equals pos_no.Id
|
2023-09-05 11:38:43 +07:00
|
|
|
|
// join pos_lv in _context.PositionLevels on s.PositionLevelId equals pos_lv.Id
|
2023-05-30 10:11:40 +07:00
|
|
|
|
join pos_type in _context.PositionTypes on s.PositionTypeId equals pos_type.Id
|
|
|
|
|
|
where s.Profile.Id == id
|
|
|
|
|
|
orderby s.Date.Value
|
|
|
|
|
|
select new
|
|
|
|
|
|
{
|
|
|
|
|
|
SalaryDate = s.Date == null ? "" : s.Date == new DateTime(1, 1, 1) ? "" : s.Date.Value.ToThaiShortDate(),
|
|
|
|
|
|
Position = s.SalaryClass,
|
|
|
|
|
|
PosNo = pos_no.Name,
|
2023-09-05 11:38:43 +07:00
|
|
|
|
Rank = s.PositionLevel == null ? null : s.PositionLevel.Name,
|
2023-05-30 10:11:40 +07:00
|
|
|
|
Salary = s.Amount == null ? "" : s.Amount.ToString().ToInteger().ToNumericText(),
|
|
|
|
|
|
RefAll = s.SalaryRef,
|
|
|
|
|
|
PositionType = pos_type.Name,
|
2023-09-05 11:38:43 +07:00
|
|
|
|
PositionLevel = s.PositionLevel == null ? null : s.PositionLevel.Name,
|
2023-05-30 10:11:40 +07:00
|
|
|
|
PositionAmount = s.PositionSalaryAmount == null ? "" : s.PositionSalaryAmount.Value.ToString().ToInteger().ToNumericText(),
|
|
|
|
|
|
FullName = profile2.FullName,
|
|
|
|
|
|
OcFullPath = profile2.OcFullPath
|
|
|
|
|
|
}).ToList();
|
|
|
|
|
|
|
|
|
|
|
|
while (salary.Count < 30)
|
|
|
|
|
|
{
|
|
|
|
|
|
salary.Add(new
|
|
|
|
|
|
{
|
|
|
|
|
|
SalaryDate = "",
|
|
|
|
|
|
Position = "",
|
|
|
|
|
|
PosNo = "",
|
|
|
|
|
|
Rank = "",
|
|
|
|
|
|
Salary = "",
|
|
|
|
|
|
RefAll = "",
|
|
|
|
|
|
PositionType = "",
|
|
|
|
|
|
PositionLevel = "",
|
|
|
|
|
|
PositionAmount = "",
|
|
|
|
|
|
FullName = profile2.FullName,
|
|
|
|
|
|
OcFullPath = profile2.OcFullPath
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var rptFile2 = Path.Combine(_hostingEnvironment.ContentRootPath, "Report", "Profile", $"rptKP7_Page2.trdp");
|
|
|
|
|
|
|
|
|
|
|
|
ReportPackager reportPackager2 = new ReportPackager();
|
|
|
|
|
|
Telerik.Reporting.Report? report2 = null;
|
|
|
|
|
|
using (var sourceStream = System.IO.File.OpenRead(rptFile2))
|
|
|
|
|
|
{
|
|
|
|
|
|
report2 = (Telerik.Reporting.Report)reportPackager.UnpackageDocument(sourceStream);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
report2.ReportParameters["FullName"].Value = profile2.FullName;
|
|
|
|
|
|
report2.ReportParameters["OcFullPath"].Value = profile2.OcFullPath;
|
|
|
|
|
|
|
|
|
|
|
|
// binding to table
|
|
|
|
|
|
var tblSalary = (Telerik.Reporting.Table)report2.Items["detailSection1"].Items["tblSalary"];
|
|
|
|
|
|
tblSalary.DataSource = salary;
|
|
|
|
|
|
|
|
|
|
|
|
System.Collections.Hashtable deviceInfo2 = new System.Collections.Hashtable();
|
|
|
|
|
|
|
|
|
|
|
|
InstanceReportSource instanceReportSource2 = new InstanceReportSource()
|
|
|
|
|
|
{
|
|
|
|
|
|
ReportDocument = report2
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ReportProcessor reportProcessor2 = new ReportProcessor(_configuration);
|
|
|
|
|
|
RenderingResult result2 = reportProcessor2.RenderReport("PDF", instanceReportSource2, deviceInfo2);
|
|
|
|
|
|
|
|
|
|
|
|
// byte array waiting for merge pdf
|
|
|
|
|
|
var content2 = result2.DocumentBytes;
|
|
|
|
|
|
|
|
|
|
|
|
// merge pdf
|
|
|
|
|
|
using (MemoryStream ms = new MemoryStream())
|
|
|
|
|
|
{
|
|
|
|
|
|
using (PdfDocument pdf = new PdfDocument(new PdfWriter(ms).SetSmartMode(true)))
|
|
|
|
|
|
{
|
|
|
|
|
|
// Create reader from bytes
|
|
|
|
|
|
using (MemoryStream memoryStream = new MemoryStream(content))
|
|
|
|
|
|
{
|
|
|
|
|
|
// Create reader from bytes
|
|
|
|
|
|
using (PdfReader reader = new PdfReader(memoryStream))
|
|
|
|
|
|
{
|
|
|
|
|
|
PdfDocument srcDoc = new PdfDocument(reader);
|
|
|
|
|
|
srcDoc.CopyPagesTo(1, srcDoc.GetNumberOfPages(), pdf);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Create reader from bytes
|
|
|
|
|
|
if (content2 != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
using (MemoryStream memoryStream = new MemoryStream(content2))
|
|
|
|
|
|
{
|
|
|
|
|
|
// Create reader from bytes
|
|
|
|
|
|
using (PdfReader reader = new PdfReader(memoryStream))
|
|
|
|
|
|
{
|
|
|
|
|
|
PdfDocument srcDoc = new PdfDocument(reader);
|
|
|
|
|
|
srcDoc.CopyPagesTo(1, srcDoc.GetNumberOfPages(), pdf);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
pdf.Close();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var fileContent = ms.ToArray();
|
|
|
|
|
|
return File(fileContent, "application/pdf", $"กก_1_{id}.pdf");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
|
|
|
|
|
return Error(ex);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
}
|
2023-05-10 20:11:47 +07:00
|
|
|
|
}
|