From 248870d8840449d7d23683e67b170737e518d4f5 Mon Sep 17 00:00:00 2001 From: Suphonchai Phoonsawat Date: Mon, 4 Sep 2023 13:44:34 +0700 Subject: [PATCH] =?UTF-8?q?=E0=B8=A3=E0=B8=B2=E0=B8=A2=E0=B8=87=E0=B8=B2?= =?UTF-8?q?=E0=B8=99=20=E0=B9=81=E0=B8=A5=E0=B8=B0=20=E0=B9=81=E0=B8=81?= =?UTF-8?q?=E0=B9=89=E0=B8=84=E0=B8=B3=E0=B8=AA=E0=B8=B1=E0=B9=89=E0=B9=88?= =?UTF-8?q?=E0=B8=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Commands/CommandReportRepository.cs | 43 ++++++ .../Controllers/OrderController.cs | 6 +- .../Controllers/CommandReportController.cs | 144 ++++++++++++++++-- .../Reports/03-คำสั่งแต่งตั้งผู้สอบแข่งขัน.trdp | Bin 2960 -> 2960 bytes ...8-คำสั่งรับโอนข้าราชการกรุงเทพมหานครสามัญ-5.trdp | Bin 29003 -> 29082 bytes ...คำสั่งรับโอนข้าราชการกรุงเทพมหานครสามัญ5-10.trdp | Bin 3034 -> 2637 bytes 6 files changed, 181 insertions(+), 12 deletions(-) diff --git a/BMA.EHR.Application/Repositories/Commands/CommandReportRepository.cs b/BMA.EHR.Application/Repositories/Commands/CommandReportRepository.cs index d3daa100..a6f3345e 100644 --- a/BMA.EHR.Application/Repositories/Commands/CommandReportRepository.cs +++ b/BMA.EHR.Application/Repositories/Commands/CommandReportRepository.cs @@ -578,6 +578,49 @@ namespace BMA.EHR.Application.Repositories.Commands } } + public async Task> GetCommandType14AttachmentAsync(Guid id) + { + 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.OrganizationPosition) + .ThenInclude(x => x.Organization) + .Include(x => x.PositionPath) + .Include(x => x.PositionLevel) + .Include(x => x.PositionNumber) + .Include(x => x.PositionType) + on r.RefPlacementProfileId equals p.Id + select new CommandType03Response + { + CitizenId = r.CitizenId, + FullName = $"{r.Prefix}{r.FirstName} {r.LastName}", + OldOc = p.OrganizationPositionOld, + OldPositionName = p.OrganizationPositionOld, + OldPositionLevel = p.PositionLevelOld, + OldPositionType = p.PositionTypeOld, + OldPositionNumber = p.PositionNumberOld, + OldSalary = p.AmountOld == null ? 0 : p.AmountOld.Value, + NewOc = _organizationCommonRepository.GetOrganizationNameFullPath(p.OrganizationPosition!.Organization!.Id, false, false, "/"), + NewPositionName = p.PositionPath == null ? "" : p.PositionPath!.Name, + NewPositionLevel = p.PositionLevel == null ? "" : p.PositionLevel.Name, + NewPositionType = p.PositionType == null ? "" : p.PositionType.Name, + NewPositionNumber = p.PositionNumber == null ? "" : p.PositionNumber.Name, + NewSalary = p.Amount == null ? 0 : p.Amount.Value, + AppointDate = p.RecruitDate == null ? "" : p.RecruitDate.Value.ToThaiFullDate3() + }) + .ToList(); + + return report_data; + } + public async Task> GetCommandType15AttachmentAsync(Guid id) { try diff --git a/BMA.EHR.Command.Service/Controllers/OrderController.cs b/BMA.EHR.Command.Service/Controllers/OrderController.cs index 779ff581..2e06608e 100644 --- a/BMA.EHR.Command.Service/Controllers/OrderController.cs +++ b/BMA.EHR.Command.Service/Controllers/OrderController.cs @@ -2521,9 +2521,9 @@ namespace BMA.EHR.Command.Service.Controllers order.CommandStatus = status!; order.CommandAffectDate = req.orderDate; - order.PlacementCommandIssuer = req.placementCommandIssuer; - order.PlacementCommandNo = req.placementCommandNo; - order.PlacementCommandDate = req.placementCommandDate; + //order.PlacementCommandIssuer = req.placementCommandIssuer; + //order.PlacementCommandNo = req.placementCommandNo; + //order.PlacementCommandDate = req.placementCommandDate; var result = await _repository.UpdateAsync(order); diff --git a/BMA.EHR.Report.Service/Controllers/CommandReportController.cs b/BMA.EHR.Report.Service/Controllers/CommandReportController.cs index f071749c..56618886 100644 --- a/BMA.EHR.Report.Service/Controllers/CommandReportController.cs +++ b/BMA.EHR.Report.Service/Controllers/CommandReportController.cs @@ -1410,6 +1410,128 @@ namespace BMA.EHR.Report.Service.Controllers #endregion + #region " C-PM-14 " + + private async Task GenerateCommandReportType14_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, + + TransferOrganizationName = raw_data.TransferOrganizationName, + ConclusionReceiveNo = raw_data.ConclusionReceiveNo, + ConclusionReceiveDate = raw_data.ConclusionReceiveDate == null ? "" : raw_data.ConclusionReceiveDate.Value.ToThaiFullDate3(), + }; + + var rptFile = Path.Combine(_hostingEnvironment.ContentRootPath, "Reports", $"28-คำสั่งรับโอนข้าราชการกรุงเทพมหานครสามัญ-5.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; + + 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; + } + } + + private async Task GenerateCommandReportType14_Attachment(Guid commandId, string exportType) + { + try + { + var command = await _repository.GetByIdAsync(commandId); + if (command == null) + { + throw new Exception(GlobalMessages.CommandNotFound); + } + + var data = await _commandReportRepository.GetCommandType14AttachmentAsync(commandId); + + var rptFile = Path.Combine(_hostingEnvironment.ContentRootPath, "Reports", $"28-คำสั่งรับโอนข้าราชการกรุงเทพมหานครสามัญ5-10.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); + } + + var tblData = (Telerik.Reporting.Table)report.Items["detailSection1"].Items["table1"]; + + tblData.DataSource = data; + + report.ReportParameters["IssuerOrganizationName"].Value = command.IssuerOrganizationName; + report.ReportParameters["CommandNo"].Value = command.CommandNo; + report.ReportParameters["CommandYear"].Value = command.CommandYear.ToInteger().ToThaiYear().ToString(); + report.ReportParameters["CommandExecuteDate"].Value = command.CommandExcecuteDate == null ? "" : command.CommandExcecuteDate.Value.ToThaiFullDate3(); + + System.Collections.Hashtable deviceInfo = new System.Collections.Hashtable(); + + InstanceReportSource instanceReportSource = new InstanceReportSource() + { + ReportDocument = report + }; + + + ReportProcessor reportProcessor = new ReportProcessor(_configuration); + RenderingResult result = reportProcessor.RenderReport(exportType, instanceReportSource, deviceInfo); + + var content = result.DocumentBytes; + + return content; + } + catch + { + throw; + } + } + + #endregion + #region " C-PM-15 " private async Task GenerateCommandReportType15_Cover(Guid commandId, string exportType) @@ -2829,7 +2951,7 @@ namespace BMA.EHR.Report.Service.Controllers [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] - public IActionResult GetCommandType14CoverReport(Guid id, string exportType = "pdf") + public async Task> GetCommandType14CoverReportAsync(Guid id, string exportType = "pdf") { try { @@ -2841,10 +2963,12 @@ namespace BMA.EHR.Report.Service.Controllers case "xlsx": mimeType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; break; } - var rptFile = Path.Combine(_hostingEnvironment.ContentRootPath, "Reports", $"28-คำสั่งรับโอนข้าราชการกรุงเทพมหานครสามัญ-5.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 GenerateCommandReportType14_Cover(id, exportType); + return File(contentData, mimeType, $"command-{cmd.CommandNo}-{cmd.CommandYear.ToInteger().ToThaiYear()}.{exportType.Trim().ToLower()}"); } catch { @@ -2866,10 +2990,14 @@ namespace BMA.EHR.Report.Service.Controllers [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] - public IActionResult GetCommandType14AttachmentReport(Guid id, string exportType = "pdf") + public async Task> GetCommandType14AttachmentReportAsync(Guid id, string exportType = "pdf") { try { + var cmd = await _repository.GetByIdAsync(id); + if (cmd == null) + throw new Exception(GlobalMessages.CommandNotFound); + var mimeType = ""; switch (exportType.Trim().ToLower()) { @@ -2878,10 +3006,8 @@ namespace BMA.EHR.Report.Service.Controllers case "xlsx": mimeType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; break; } - var rptFile = Path.Combine(_hostingEnvironment.ContentRootPath, "Reports", $"28-คำสั่งรับโอนข้าราชการกรุงเทพมหานครสามัญ5-10.trdp"); - var contentData = _reportGenerator.GenerateReport(rptFile, exportType); - - return File(contentData, mimeType, $"command-attachment.{exportType.Trim().ToLower()}"); + var contentData = await GenerateCommandReportType14_Attachment(id, exportType); + return File(contentData, mimeType, $"command-attachment-{cmd.CommandNo}-{cmd.CommandYear.ToInteger().ToThaiYear()}.{exportType.Trim().ToLower()}"); } catch { diff --git a/BMA.EHR.Report.Service/Reports/03-คำสั่งแต่งตั้งผู้สอบแข่งขัน.trdp b/BMA.EHR.Report.Service/Reports/03-คำสั่งแต่งตั้งผู้สอบแข่งขัน.trdp index c8ac9bdd35fa061da769149716377be45d692281..40912d825a73cee880f49f6f4436ef224a3e45c4 100644 GIT binary patch delta 46 tcmbOrK0%x}z?+#xgn@y9gFz!lWh1Wy7c-EatikmVO!IJCf@u$K4*=3o37P-^ delta 46 tcmbOrK0%x}z?+#xgn@y9gF$+c@E@mJ-S%d2#nC9WO1k)be9su273OWD) diff --git a/BMA.EHR.Report.Service/Reports/28-คำสั่งรับโอนข้าราชการกรุงเทพมหานครสามัญ-5.trdp b/BMA.EHR.Report.Service/Reports/28-คำสั่งรับโอนข้าราชการกรุงเทพมหานครสามัญ-5.trdp index bc4f20d5075477cb444330a9cf79858acc9bf4a6..0f5a5f8ac3bdb29a33ef1c55f0df22e82620ff78 100644 GIT binary patch delta 1921 zcmV-{2Y&d=;sKiD0S!<~0|XQR000O8wOu5!4U=dNwOu4vQa7=^@CE=jMXfS`> zSzB)tM-+aq)c-KrC-T6o?+H~5N}xalq*fe?+PAGeu~%L1TDxm*6%wJ5LXePJNE$g* zh$KQ(M3G1+?fT#BPwC8=nZ0G5bpkYLEytOi>p9=K?@V5}+cD5>VmrEJR+T)?DTtU2 ztErow;G^=$;Rq?%7zPImtOTPEJ z@AZA}jqfcM%V+Zn`rfiSRi&VydfU2FH?{5+TW?mCdAmmxL=QKes?v7d?pLbnG}@%2 zIoKrzvGpHu!|JFuoJ*-u3%Np3&Evd6$w6px#w8sGn)KlkaW&njlZH##Kv#c>-fFv) z%5ykZ4vB0=Cy8xfb=|#Z5HwHjx>JVUqA*-13vM`0XI!>SSL`x>71cFc`=Mu|S#pQ6 zrQatEkglsBHQZB$O~dCXxzJJ58*a}g)7D)y)6rUV4;B79YBw0k<8L*iM{sTSiXx#e zGKM6F@W808DisW@&RgB8l4E}@N*D;S-p~wEvn{~UGBra%H}npfzt^Q_>g-6hYqlgv zk;9`1NR(n-!+@#PuSKy)!-MsN2t>P?7#JvlrbYS9;Y!GHF5tI_K^Flmri@e#-}~NM z-`n#Ck9}|Xr^`Aqnhu_EoF1{iv0Iv{-`5x#jPwVRcb6YsNMk&z9v6R!=@OfsM<}8c zUD16*Z#E60j0Dllyg%qGXxcKUEnLY~-@Xl8TP zdVr96p!++b*-6-nBf@ry@G0VQzLbVg1)qx`gi=1fw+kNc52j?^7JD2#g`PhAQng!y z#wMua8_^#83==ltkxqZurVZo|*8IUUbOzJU7=2pwz1P0?E_K>EAK&4M?Rzg_@ExDx zdry3C11Ne5-#u9UrUfOu%4_1JWVC^C_wxL0PJ$3|JwGIbuvU3HCOKd_& z=>|+*g2#Qie56e%k}omE5mN|&L;78%oi8L~i$LNAH1?pe$+>@`lNK@iLxLP;?kj+b z)aX!c&4$rqF>a1Dh<=+ey#}J_UVj6YyC9@Jpeu9vCCw#t119Ca;J|G`+u#xG)R*Ay z9|RWx41HLz2#YxwZ-IkRBT=~*)2OU>I(nLZr>zwsD; z&nSKnLm^s@0VMAuF_%^!1F*O-`Ac{!rix4(rP;Ffp?rAH3729reF(S&QFs}le?Ojn&S095W93xl$@R9@B~pwB%(IZoM=Q-- zSZbDWj*oH59JbBzD@Vaj76+1ER>LOuy{?;tGjmC|d97bnzP^>RY03_wcVrFE^P)Sc z;pLcyqm&OM2`gNUWb!d@Yo@c1QlBF5JAAM;F3BjV(a709H$lK6VJPGO0e@E->hB6+5UX%=3i6^uim{JKo1<~yg;kqQf?vyIWHdrcNC_|6zu2d z(Dxwl_HSxofd*E12a-f8HAg)PFzK(;kB>_Q4^K(Qf1wsFKJ|#}Gc| zCz;Hrs?RhjC!ZOf)KHg7t_zT7hm$P31jIAl7o zAuro0AxAQ}lZ2~C^XGK9SR%N_D%hZ6ly9k0fUH@L&JwJHAZEToIz~zHaez&#vHLkS zc0tE4@FFuNYg&uciOcT!98{wjxP47Gse_y457R+%y~tR-O?_lb34P%te!cBjay899LX1s@X(1A1CZMw+zQSKW>w zM431}ah#whU{5?t047y_Uwr-_P)iE~1QY-O00;oJT_lr?Z|(!NT_lrza7PZcT_jgh zH?h6&1^@tH9+T2=E+4gBBv*zs#hs!6008d*000vJ000000000000000&XXT;CI-E5 H00000ox*yH delta 1841 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 delta 2721 zcmV;S3SRZi6xtUUP)h>@6aWAK2ml>w3Rk67e$5>U006Cwkr*+5UEPl3L>9hB+IO&g zwOouHJHL$_5IqQH1dK+LUbr@i>5fR^$Z?n+uC_-bHK5&<21}X;| zl)h0=Lk`ObH4YMvj8ps2JYDv^Dz$LSNK0$pirH^Nb1kH68`=Yil0NhXKzZ&4;F_S zxAiQC4+Hmq=|Bt75n zeVC-?I91~mU%4TD>z|<}5N$WY+CGq)N;^*9>J3_LEI^?i?9d!Mq95Y6F&fRNMA879 zCp<78-kl7LQ*Dm@@GQI+62muTF2A_?x|(p_9oFjBDj zggewr#PM|^(D;zKOF&bSfu`nT`>V|imKnDG5xCANaJ9I9 zSs#;E7Iu`a`yZN#zzM;mo`QlnW+Hh-Vy1LoLo#HRT=P9RK0QC_DyM>?a9mXtS6eWc z7|BTCY$Q|_HCve2F``CI<00UviR2ZDnk~4QSW(mAsHrMyw&4V4wU_x2B~%tR1W2OCmr2f?y}b8-TU zQfp^IOT7%zVF1uQb7Ex0PbLxyp=oz%NG%>&je~5+%DN=GF|s@?<-ts$u`Ua+0z=(y z;i_b}B0H+ue0ZxISW5R5vco0+`8$Wprf@0UNyrWtZah~HE~R@1nc>pNfBlMo!)4>S zR_Sg*cD&^87UX!@7%#<}x~*(8s78asW$SQ>#CHYZqLu&`?Au|8yeE6v7Ef>(E8eq) z{+~nKS7cKg-uQ71Wv&7{)}Fz3HdNrbx2uj`c25)V%AL`Xyh1@)yc?*~Ngs6>7pR|R zLRMxpYc&)bS*+TEVp*5Q^Y_Gm?5x@%Hbv=bV>T+(Do$~$p~VQRmauHos%MDhK7;M$ zKhfL18&%zsQVsP+xOEHaT^~HVxQOnWY*cj%NHr82Vc*gf%RZ$`v)uY8XW!x@ER;?= z1N(jpCx3YRY3NB(gPXU@-e#fTE$EnG|3dsmyhi?()6Oa~Lb;_Yl9_UUoB8`K_LXuE z3Rhwy6XUMmB->2mS?9dF1x2&Qz~=As-dU~DBwM=H*g2M)wE`o@b_!o@s%6<8{*)Xs zcS(-C`vDSPxQl<#%H}rivhNwVwtR)NQZ2V<6REarr7<&Yi(9h-BhwZi2hvG#3}1LE z$=6O2`LcYqvGQe_Xs;4~_h(f@jWmOntwwfRHLEjygMA5=RHP=y9hIwjnu<9=*UO;y zr$rwoQqbR<#8T4RYr;^{Q~uh5{x$;!flcPe@q>#QO4b=m5^I1#q(4Jr=}Y#K-eLwz zuXkA6>4!)%JbEiu?SbLPtKyJ!%J8kv5Bq$`Zw|Ma4;Adi9>X7#Dxa?18fd6nqZJ2 zi1wojS8Whvi$4rSAA)EII853$xIQQ`*=$HQ8djJLi7;Lb${3?A9V#Q|CNRSC=A{e5 zErG1dK8IM=GdO#UK6OlGaWQjWa0QM0TnrCny=jO@d!62FUs1f{NV2E|zqAs$4tbQT_rhpp_t*9k-P z48G6-ne7#SZlHV!5kwUS)qwaS;2IF0A7nx33K!XGC)pbKt|VN@P9XMLUI>mHaFxjCOf$*%amKAJ5NqJ6Ae$HPEqHA(oJ-=$#F`CY0majr-zxCWOx z2*yQga!{xy2b=39LHGAg48tZ>Amzb4*eA4(&|?nSTv8rC(fU#(}1P+yuo zR!9d&kERC65by=+F{FIl&xiVqdIL#Z={xp#@ z6aWAK2ml>w3X|ms;SL>Y3Rk67e$5>U006Cwlhg?=ARTH7SBU)dd6fVF0JZ=C022TJ b00000000000001G3X>uVB?d