diff --git a/.github/workflows/release_Retirement.yaml b/.github/workflows/release_Retirement.yaml index 20b0fc28..6496cdf6 100644 --- a/.github/workflows/release_Retirement.yaml +++ b/.github/workflows/release_Retirement.yaml @@ -16,7 +16,7 @@ env: TOKEN_LINE: uxuK5hDzS2DsoC5piJBrWRLiz8GgY7iMZZldOWsDDF0 jobs: - # act workflow_dispatch -W .github/workflows/release_retirement.yaml --input IMAGE_VER=test-v6.1 -s DOCKER_USER=sorawit -s DOCKER_PASS=P@ssword -s SSH_PASSWORD=P@ssw0rd + # act workflow_dispatch -W .github/workflows/release_retirement.yaml --input IMAGE_VER=retirement-1.0.0 -s DOCKER_USER=sorawit -s DOCKER_PASS=P@ssword -s SSH_PASSWORD=P@ssw0rd release-dev: runs-on: ubuntu-latest steps: diff --git a/.github/workflows/release_command.yaml b/.github/workflows/release_command.yaml index 357faa3a..95d40794 100644 --- a/.github/workflows/release_command.yaml +++ b/.github/workflows/release_command.yaml @@ -16,7 +16,7 @@ env: TOKEN_LINE: uxuK5hDzS2DsoC5piJBrWRLiz8GgY7iMZZldOWsDDF0 jobs: - # act workflow_dispatch -W .github/workflows/release_command.yaml --input IMAGE_VER=test-v6.1 -s DOCKER_USER=sorawit -s DOCKER_PASS=P@ssword -s SSH_PASSWORD=P@ssw0rd + # act workflow_dispatch -W .github/workflows/release_command.yaml --input IMAGE_VER=command-1.0.0 -s DOCKER_USER=sorawit -s DOCKER_PASS=P@ssword -s SSH_PASSWORD=P@ssw0rd release-dev: runs-on: ubuntu-latest steps: diff --git a/.github/workflows/release_insignia.yaml b/.github/workflows/release_insignia.yaml index 61c29d2a..4d9733fd 100644 --- a/.github/workflows/release_insignia.yaml +++ b/.github/workflows/release_insignia.yaml @@ -16,7 +16,7 @@ env: TOKEN_LINE: uxuK5hDzS2DsoC5piJBrWRLiz8GgY7iMZZldOWsDDF0 jobs: - # act workflow_dispatch -W .github/workflows/release_insignia.yaml --input IMAGE_VER=test-v6.1 -s DOCKER_USER=sorawit -s DOCKER_PASS=P@ssword -s SSH_PASSWORD=P@ssw0rd + # act workflow_dispatch -W .github/workflows/release_insignia.yaml --input IMAGE_VER=insignia-1.0.0 -s DOCKER_USER=sorawit -s DOCKER_PASS=P@ssword -s SSH_PASSWORD=P@ssw0rd release-dev: runs-on: ubuntu-latest steps: diff --git a/.github/workflows/release_orgEmployee.yaml b/.github/workflows/release_orgEmployee.yaml index 1315f499..a473b542 100644 --- a/.github/workflows/release_orgEmployee.yaml +++ b/.github/workflows/release_orgEmployee.yaml @@ -16,7 +16,7 @@ env: TOKEN_LINE: uxuK5hDzS2DsoC5piJBrWRLiz8GgY7iMZZldOWsDDF0 jobs: - # act workflow_dispatch -W .github/workflows/release_ore-employee.yaml --input IMAGE_VER=test-v6.1 -s DOCKER_USER=sorawit -s DOCKER_PASS=P@ssword -s SSH_PASSWORD=P@ssw0rd + # act workflow_dispatch -W .github/workflows/release_ore-employee.yaml --input IMAGE_VER=orgEmployee-1.0.0 -s DOCKER_USER=sorawit -s DOCKER_PASS=P@ssword -s SSH_PASSWORD=P@ssw0rd release-dev: runs-on: ubuntu-latest steps: diff --git a/.github/workflows/release_placement.yaml b/.github/workflows/release_placement.yaml index f4e3f46b..3eabd94b 100644 --- a/.github/workflows/release_placement.yaml +++ b/.github/workflows/release_placement.yaml @@ -16,7 +16,7 @@ env: TOKEN_LINE: uxuK5hDzS2DsoC5piJBrWRLiz8GgY7iMZZldOWsDDF0 jobs: - # act workflow_dispatch -W .github/workflows/release_placement.yaml --input IMAGE_VER=test-v6.1 -s DOCKER_USER=sorawit -s DOCKER_PASS=P@ssword -s SSH_PASSWORD=P@ssw0rd + # act workflow_dispatch -W .github/workflows/release_placement.yaml --input IMAGE_VER=placement-1.0.0 -s DOCKER_USER=sorawit -s DOCKER_PASS=P@ssword -s SSH_PASSWORD=P@ssw0rd release-dev: runs-on: ubuntu-latest steps: diff --git a/.github/workflows/release_report.yaml b/.github/workflows/release_report.yaml index d39dba81..7d9b2f07 100644 --- a/.github/workflows/release_report.yaml +++ b/.github/workflows/release_report.yaml @@ -16,7 +16,7 @@ env: TOKEN_LINE: uxuK5hDzS2DsoC5piJBrWRLiz8GgY7iMZZldOWsDDF0 jobs: - # act workflow_dispatch -W .github/workflows/release_report.yaml --input IMAGE_VER=test-v6.1 -s DOCKER_USER=sorawit -s DOCKER_PASS=P@ssword -s SSH_PASSWORD=P@ssw0rd + # act workflow_dispatch -W .github/workflows/release_report.yaml --input IMAGE_VER=report-1.0.0 -s DOCKER_USER=sorawit -s DOCKER_PASS=P@ssword -s SSH_PASSWORD=P@ssw0rd release-dev: runs-on: ubuntu-latest steps: diff --git a/BMA.EHR.Report.Service/BMA.EHR.Report.Service.csproj b/BMA.EHR.Report.Service/BMA.EHR.Report.Service.csproj index 44241a8e..71b09ca1 100644 --- a/BMA.EHR.Report.Service/BMA.EHR.Report.Service.csproj +++ b/BMA.EHR.Report.Service/BMA.EHR.Report.Service.csproj @@ -24,6 +24,7 @@ + diff --git a/BMA.EHR.Report.Service/Controllers/DeceasedReportController.cs b/BMA.EHR.Report.Service/Controllers/DeceasedReportController.cs index 9d7fb5e1..db48c2e3 100644 --- a/BMA.EHR.Report.Service/Controllers/DeceasedReportController.cs +++ b/BMA.EHR.Report.Service/Controllers/DeceasedReportController.cs @@ -12,6 +12,8 @@ using Telerik.Reporting.Processing; using System.IO; using BMA.EHR.Application.Repositories; using BMA.EHR.Report.Service.Requests; +using iTextSharp.text.pdf; +using iTextSharp.text; namespace BMA.EHR.Report.Service.Controllers { @@ -30,6 +32,8 @@ namespace BMA.EHR.Report.Service.Controllers private readonly GenericReportGenerator _reportGenerator; private readonly RetireReportRepository _repository; private readonly MinIOService _documentService; + // for add watermark + private BaseFont baseFont = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1252, false); #endregion @@ -127,13 +131,13 @@ namespace BMA.EHR.Report.Service.Controllers /// 36-บันทึกเวียนแจ้งการถึงแก่กรรม /// /// Id รายการบันทึกเวียนแจ้งการถึงแก่กรรม - /// pdf, docx หรือ xlsx /// /// เมื่อทำการอ่านข้อมูลจาก Relational Database สำเร็จ /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน - [HttpGet("copy/36/{exportType}/{id}")] - public async Task> GetDeceasedReportCopyAsync(Guid id, string exportType = "pdf") + [HttpGet("copy/36/{id}")] + [AllowAnonymous] + public async Task> GetDeceasedReportCopyAsync(Guid id) { try { @@ -156,13 +160,13 @@ namespace BMA.EHR.Report.Service.Controllers DeceasedNumber = data.GetType().GetProperty("Number").GetValue(data), Location = data.GetType().GetProperty("Location").GetValue(data), }; - 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 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 rptFile = System.IO.Path.Combine(_hostingEnvironment.ContentRootPath, "Reports", $"36-บันทึกเวียนแจ้งการถึงแก่กรรม.trdp"); ReportPackager reportPacker = new ReportPackager(); @@ -178,8 +182,44 @@ namespace BMA.EHR.Report.Service.Controllers ReportDocument = report, }; ReportProcessor reportProcessor = new ReportProcessor(_configuration); - RenderingResult result = reportProcessor.RenderReport($"{exportType}", instanceReportSource, deviceInfo); - return File(result.DocumentBytes, mimeType, $"รายละเอียดบันทึกเวียนแจ้งการถึงแก่กรรม.{exportType.Trim().ToLower()}"); + RenderingResult result = reportProcessor.RenderReport($"pdf", instanceReportSource, deviceInfo); + // return File(result.DocumentBytes, mimeType, $"รายละเอียดบันทึกเวียนแจ้งการถึงแก่กรรม.{exportType.Trim().ToLower()}"); + + var now = DateTime.Now.ToString("yyyyMMdd-HHmmss"); + var file = System.IO.Path.Combine(_hostingEnvironment.WebRootPath, "tmp", $"tmp-{now}.pdf"); + var file_copy = System.IO.Path.Combine(_hostingEnvironment.WebRootPath, "tmp", $"tmp-{now}-copy.pdf"); + + try + { + // Copy to File + System.IO.File.WriteAllBytes(file, result.DocumentBytes); + var watermark_text = "COPY COPY COPY COPY"; + var fName = $"รายละเอียดบันทึกเวียนแจ้งการถึงแก่กรรม.pdf"; + + AddWatermark(file, file_copy, watermark_text); + + using (var fileStream = new System.IO.FileStream(file_copy, FileMode.Open, FileAccess.Read)) + { + using (var ms = new MemoryStream()) + { + fileStream.CopyTo(ms); + ms.Flush(); + return File(ms.ToArray(), "application/octet-stream", fName); + } + } + } + catch + { + throw; + } + finally + { + if (System.IO.File.Exists(file)) + System.IO.File.Delete(file); + + if (System.IO.File.Exists(file_copy)) + System.IO.File.Delete(file_copy); + } } else { @@ -226,5 +266,58 @@ namespace BMA.EHR.Report.Service.Controllers #endregion #endregion + + #region " Add Watermark " + + private void AddWaterMarkText(PdfContentByte pdfData, string watermarkText, BaseFont font, float fontSize, float angle, BaseColor color, iTextSharp.text.Rectangle realPageSize) + { + var gstate = new PdfGState { FillOpacity = 0.5f, StrokeOpacity = 0.3f }; + pdfData.SaveState(); + pdfData.SetGState(gstate); + pdfData.SetColorFill(color); + pdfData.BeginText(); + pdfData.SetFontAndSize(font, fontSize); + var x = (realPageSize.Right + realPageSize.Left) / 2; + var y = (realPageSize.Bottom + realPageSize.Top) / 2; + pdfData.ShowTextAligned(Element.ALIGN_CENTER, watermarkText, x, y, angle); + pdfData.EndText(); + pdfData.RestoreState(); + } + + private bool AddWatermark(string inputfilepath, string outputfilepath, string watermark_text) + { + PdfReader pdfReader = null; + PdfStamper pdfStamper = null; + try + { + + pdfReader = new PdfReader(inputfilepath); + int numberOfPages = pdfReader.NumberOfPages; + iTextSharp.text.Rectangle pagesize = pdfReader.GetPageSize(1); + pdfStamper = new PdfStamper(pdfReader, new FileStream(outputfilepath, FileMode.Create)); + + for (int i = 1; i <= numberOfPages; i++) + { + var dc = pdfStamper.GetOverContent(i); + AddWaterMarkText(dc, watermark_text, baseFont, 30, 45, BaseColor.DARK_GRAY, pdfReader.GetPageSizeWithRotation(i)); + } + return true; + } + catch (Exception ex) + { + ex.Message.Trim(); + return false; + } + finally + { + if (pdfStamper != null) + pdfStamper.Close(); + + if (pdfReader != null) + pdfReader.Close(); + } + } + + #endregion } } diff --git a/BMA.EHR.Retirement.Service/Controllers/RetirementDeceasedController.cs b/BMA.EHR.Retirement.Service/Controllers/RetirementDeceasedController.cs index e1e5eaad..f46490f4 100644 --- a/BMA.EHR.Retirement.Service/Controllers/RetirementDeceasedController.cs +++ b/BMA.EHR.Retirement.Service/Controllers/RetirementDeceasedController.cs @@ -551,7 +551,7 @@ namespace BMA.EHR.Retirement.Service.Controllers payload_attach.Add(new PayloadAttachment { name = "หนังสือเวียนถึงแก่กรรม", - url = $"{_configuration["API"]}/copy/36/pdf/{retirementDeceased.Id}" + url = $"{_configuration["APIV2"]}/report/deceased/copy/36/{retirementDeceased.Id}" }); var payload = new CommandPayload() diff --git a/BMA.EHR.Retirement.Service/appsettings.json b/BMA.EHR.Retirement.Service/appsettings.json index 1d3bf20a..95a20137 100644 --- a/BMA.EHR.Retirement.Service/appsettings.json +++ b/BMA.EHR.Retirement.Service/appsettings.json @@ -33,5 +33,6 @@ "BucketName": "bma-recruit" }, "Protocol": "HTTPS", - "API": "https://bma-ehr.frappet.synology.me/api/v1" + "API": "https://bma-ehr.frappet.synology.me/api/v1", + "APIV2": "https://bma-ehr.frappet.synology.me/api/v2" } \ No newline at end of file