From 0c1a8f29cc63d18f5c446877b8145ee5e594561e Mon Sep 17 00:00:00 2001 From: Suphonchai Phoonsawat Date: Tue, 5 Sep 2023 11:04:12 +0700 Subject: [PATCH 1/2] =?UTF-8?q?=E0=B9=81=E0=B8=81=E0=B9=89=E0=B8=81?= =?UTF-8?q?=E0=B8=B2=E0=B8=A3=E0=B9=80=E0=B8=8A=E0=B9=87=E0=B8=84=E0=B8=84?= =?UTF-8?q?=E0=B8=A7=E0=B8=B2=E0=B8=A1=E0=B8=9E=E0=B8=A3=E0=B9=89=E0=B8=AD?= =?UTF-8?q?=E0=B8=A1=E0=B9=83=E0=B8=99=E0=B8=81=E0=B8=B2=E0=B8=A3=E0=B8=AD?= =?UTF-8?q?=E0=B8=AD=E0=B8=81=E0=B8=84=E0=B8=B3=E0=B8=AA=E0=B8=B1=E0=B9=88?= =?UTF-8?q?=E0=B8=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/OrderController.cs | 43 +++++++++++++++---- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/BMA.EHR.Command.Service/Controllers/OrderController.cs b/BMA.EHR.Command.Service/Controllers/OrderController.cs index 2e06608e..3364cde7 100644 --- a/BMA.EHR.Command.Service/Controllers/OrderController.cs +++ b/BMA.EHR.Command.Service/Controllers/OrderController.cs @@ -178,16 +178,43 @@ namespace BMA.EHR.Command.Service.Controllers var cover = command.Documents.FirstOrDefault(x => x.Category == GlobalConstants.TYPE_COVER); var attatchment = command.Documents.FirstOrDefault(x => x.Category == GlobalConstants.TYPE_ATTACHMENT); - if (command.CommandNo != "" && - command.CommandYear != null && - command.CommandExcecuteDate != null && - cover != null && - attatchment != null) + switch (command.CommandType.CommandCode.ToUpper()) { - return Success(new { result = "Y" }); + case "C-PM-10": + case "C-PM-11": + case "C-PM-12": + case "C-PM-16": + case "C-PM-18": + case "C-PM-19": + case "C-PM-20": + case "C-PM-21": + { + if (command.CommandNo != "" && + command.CommandYear != null && + command.CommandExcecuteDate != null && + cover != null) + { + return Success(new { result = "Y" }); + } + else + return Success(new { result = "N" }); + } + default: + { + if (command.CommandNo != "" && + command.CommandYear != null && + command.CommandExcecuteDate != null && + cover != null && + attatchment != null) + { + return Success(new { result = "Y" }); + } + else + return Success(new { result = "N" }); + } } - else - return Success(new { result = "N" }); + + } catch { From 33da6f2d70c90632c69e5f9224e3619f90989f5a Mon Sep 17 00:00:00 2001 From: Suphonchai Phoonsawat Date: Tue, 5 Sep 2023 12:02:25 +0700 Subject: [PATCH 2/2] =?UTF-8?q?=E0=B8=A3=E0=B8=B2=E0=B8=A2=E0=B8=87?= =?UTF-8?q?=E0=B8=B2=E0=B8=99=E0=B8=84=E0=B8=B3=E0=B8=AA=E0=B8=B1=E0=B9=88?= =?UTF-8?q?=E0=B8=87=20c-pm-21?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Commands/CommandReportRepository.cs | 48 ++++++++++ .../Reports/CommandType21Response.cs | 29 ++++++ .../Controllers/CommandReportController.cs | 88 +++++++++++++++++- ...0-คำสั่งแต่งตั้งลูกจ้างชั่วคราวเป็นลูกจ้างประจำ-2.trdp | Bin 29588 -> 29552 bytes 4 files changed, 161 insertions(+), 4 deletions(-) create mode 100644 BMA.EHR.Application/Responses/Reports/CommandType21Response.cs diff --git a/BMA.EHR.Application/Repositories/Commands/CommandReportRepository.cs b/BMA.EHR.Application/Repositories/Commands/CommandReportRepository.cs index a6f3345e..e9e73368 100644 --- a/BMA.EHR.Application/Repositories/Commands/CommandReportRepository.cs +++ b/BMA.EHR.Application/Repositories/Commands/CommandReportRepository.cs @@ -5,6 +5,7 @@ using BMA.EHR.Application.Responses.Reports; using BMA.EHR.Domain.Extensions; using BMA.EHR.Domain.Models.Commands.Core; using BMA.EHR.Domain.Models.HR; +using BMA.EHR.Domain.Models.OrganizationEmployee; using BMA.EHR.Domain.Models.Placement; using BMA.EHR.Domain.Models.Retirement; using BMA.EHR.Domain.Shared; @@ -856,6 +857,53 @@ namespace BMA.EHR.Application.Repositories.Commands } } + public async Task> GetCommandType21AttachmentAsync(Guid id) + { + try + { + var raw_data = await _dbContext.Set() + .Include(c => c.Command) + .Where(c => c.Command.Id == id) + .ToListAsync(); + if (raw_data == null) + { + throw new Exception(GlobalMessages.CommandNotFound); + } + + var report_data = (from r in raw_data + join p in _dbContext.Set() + .Include(x => x.Profile) + .ThenInclude(x => x.Position) + .Include(x => x.Profile) + .ThenInclude(x => x.PositionLevel) + .Include(x => x.Profile) + .ThenInclude(x => x.PositionType) + .Include(x => x.Profile) + .ThenInclude(x => x.PosNo) + on r.RefPlacementProfileId equals p.Id + + select new CommandType21Response + { + CitizenId = r.CitizenId, + FullName = $"{r.Prefix}{r.FirstName} {r.LastName}", + Organization = p.Profile!.EmployeeOc, + PositionName = p.Profile.Position == null ? "" : p.Profile.Position.Name, + PositionLevel = p.Profile.PositionLevel == null ? "" : p.Profile.PositionLevel.Name, + PositionType = p.Profile.PositionType == null ? "" : p.Profile.PositionType.Name, + PositionNumber = p.Profile.PosNo == null ? "" : p.Profile.PosNo.Name, + Salary = r.Amount == null ? 0 : r.Amount.Value, + RetireDate = p.Profile.BirthDate.CalculateRetireDate().ToThaiFullDate3() + }) + .ToList(); + + return report_data; + } + catch + { + throw; + } + } + #endregion } } diff --git a/BMA.EHR.Application/Responses/Reports/CommandType21Response.cs b/BMA.EHR.Application/Responses/Reports/CommandType21Response.cs new file mode 100644 index 00000000..49c7d675 --- /dev/null +++ b/BMA.EHR.Application/Responses/Reports/CommandType21Response.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BMA.EHR.Application.Responses.Reports +{ + public class CommandType21Response + { + public string CitizenId { get; set; } = string.Empty; + + public string FullName { get; set; } = string.Empty; + + public string Organization { get; set; } = string.Empty; + + public string PositionName { get; set; } = string.Empty; + + public string PositionLevel { get; set; } = string.Empty; + + public string PositionType { get; set; } = string.Empty; + + public string PositionNumber { get; set; } = string.Empty; + + public double Salary { get; set; } = 0; + + public string RetireDate { get; set;} = string.Empty; + } +} diff --git a/BMA.EHR.Report.Service/Controllers/CommandReportController.cs b/BMA.EHR.Report.Service/Controllers/CommandReportController.cs index 56618886..e051449c 100644 --- a/BMA.EHR.Report.Service/Controllers/CommandReportController.cs +++ b/BMA.EHR.Report.Service/Controllers/CommandReportController.cs @@ -1,9 +1,13 @@ using BMA.EHR.Application.Repositories.Commands; using BMA.EHR.Domain.Common; using BMA.EHR.Domain.Extensions; +using BMA.EHR.Domain.Models.OrganizationEmployee; +using BMA.EHR.Domain.Models.Placement; using BMA.EHR.Domain.Shared; +using DocumentFormat.OpenXml.Drawing.Charts; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; using Swashbuckle.AspNetCore.Annotations; using Telerik.Reporting; using Telerik.Reporting.Processing; @@ -1978,6 +1982,80 @@ namespace BMA.EHR.Report.Service.Controllers #endregion + #region " C-PM-21 " + + private async Task GenerateCommandReportType21_Cover(Guid commandId, string exportType) + { + try + { + var raw_data = await _repository.GetByIdAsync(commandId); + if (raw_data == null) + { + throw new Exception(GlobalMessages.CommandNotFound); + } + + //var recvId = raw_data.Receivers.Select(x => x.RefPlacementProfileId).ToList(); + //var positionList = string.Empty; + + var command = new + { + CommandNo = raw_data.CommandNo, + CommandYear = raw_data.CommandYear.ToInteger().ToThaiYear().ToString(), + IssuerOrganizationName = raw_data.IssuerOrganizationName, + ConclusionRegisterNo = raw_data.ConclusionRegisterNo, + ConclusionRegisterDate = raw_data.ConclusionRegisterDate == null ? "" : raw_data.ConclusionRegisterDate.Value.ToThaiFullDate3(), + ConclusionResultNo = raw_data.ConclusionResultNo, + ConclusionResultDate = raw_data.ConclusionResultDate == null ? "" : raw_data.ConclusionResultDate.Value.ToThaiFullDate3(), + PositionList = "", + Count = raw_data.Receivers.Count, + CommandAffectDate = raw_data.CommandAffectDate == null ? "" : raw_data.CommandAffectDate.Value.ToThaiFullDate3(), + AuthorizedUserFullName = raw_data.AuthorizedUserFullName, + AuthorizedPosition = raw_data.AuthorizedPosition, + }; + + + var receiver = await _commandReportRepository.GetCommandType21AttachmentAsync(commandId); + + var rptFile = Path.Combine(_hostingEnvironment.ContentRootPath, "Reports", $"20-คำสั่งแต่งตั้งลูกจ้างชั่วคราวเป็นลูกจ้างประจำ-2.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 = command; + + var tblData = (Telerik.Reporting.Table)report.Items["detailSection1"].Items["table1"]; + + tblData.DataSource = receiver; + + System.Collections.Hashtable deviceInfo = new System.Collections.Hashtable(); + if (exportType == "docx") + deviceInfo["OutputFormat"] = "DOCX"; + + InstanceReportSource instanceReportSource = new InstanceReportSource() + { + ReportDocument = report + }; + + + ReportProcessor reportProcessor = new ReportProcessor(_configuration); + RenderingResult result = reportProcessor.RenderReport(exportType.ToUpper(), instanceReportSource, deviceInfo); + + var content = result.DocumentBytes; + + return content; + } + catch + { + throw; + } + } + + #endregion + #endregion #region " C-PM-01 คำสั่งบรรจุและแต่งตั้ง: สำหรับผู้สอบแข่งขันได้ " @@ -3369,7 +3447,7 @@ namespace BMA.EHR.Report.Service.Controllers [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] - public IActionResult GetCommandType21CoverReport(Guid id, string exportType = "pdf") + public async Task> GetCommandType21CoverReportAsync(Guid id, string exportType = "pdf") { try { @@ -3381,10 +3459,12 @@ namespace BMA.EHR.Report.Service.Controllers case "xlsx": mimeType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; break; } - var rptFile = Path.Combine(_hostingEnvironment.ContentRootPath, "Reports", $"20-คำสั่งแต่งตั้งลูกจ้างชั่วคราวเป็นลูกจ้างประจำ-2.trdp"); - var contentData = _reportGenerator.GenerateReport(rptFile, exportType); + var cmd = await _repository.GetByIdAsync(id); + if (cmd == null) + throw new Exception(GlobalMessages.CommandNotFound); - return File(contentData, mimeType, $"command.{exportType.Trim().ToLower()}"); + var contentData = await GenerateCommandReportType21_Cover(id, exportType); + return File(contentData, mimeType, $"command-{cmd.CommandNo}-{cmd.CommandYear.ToInteger().ToThaiYear()}.{exportType.Trim().ToLower()}"); } catch { diff --git a/BMA.EHR.Report.Service/Reports/20-คำสั่งแต่งตั้งลูกจ้างชั่วคราวเป็นลูกจ้างประจำ-2.trdp b/BMA.EHR.Report.Service/Reports/20-คำสั่งแต่งตั้งลูกจ้างชั่วคราวเป็นลูกจ้างประจำ-2.trdp index daa35a420031076b0f2de570d6e4631a135f388d..e17630f42bd2770bab61b97d506537db9b3afdb0 100644 GIT binary patch delta 2368 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 delta 2433 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