From 29407771972d274d41024ab6d17f77b61728b9e3 Mon Sep 17 00:00:00 2001 From: Suphonchai Phoonsawat Date: Mon, 19 Jun 2023 20:35:36 +0700 Subject: [PATCH] =?UTF-8?q?=E0=B9=81=E0=B8=81=E0=B9=89=E0=B9=82=E0=B8=84?= =?UTF-8?q?=E0=B9=89=E0=B8=94=E0=B8=A3=E0=B8=B2=E0=B8=A2=E0=B8=87=E0=B8=B2?= =?UTF-8?q?=E0=B8=99=20=E0=B8=9A=E0=B8=8A=201=20=E0=B9=83=E0=B8=AB?= =?UTF-8?q?=E0=B9=89=E0=B9=80=E0=B8=A3=E0=B8=B5=E0=B8=A2=E0=B8=87=E0=B8=A5?= =?UTF-8?q?=E0=B8=B3=E0=B8=94=E0=B8=B1=E0=B8=9A=20=E0=B8=9A=E0=B8=8A=202-3?= =?UTF-8?q?=20=E0=B9=81=E0=B8=AA=E0=B8=94=E0=B8=87=E0=B8=A3=E0=B8=B2?= =?UTF-8?q?=E0=B8=A2=E0=B8=8A=E0=B8=B7=E0=B9=88=E0=B8=AD=20=E0=B9=81?= =?UTF-8?q?=E0=B8=A5=E0=B8=B0=E0=B8=81=E0=B8=B2=E0=B8=A3=E0=B9=80=E0=B8=A3?= =?UTF-8?q?=E0=B8=B5=E0=B8=A2=E0=B8=87=E0=B8=A5=E0=B8=B3=E0=B8=94=E0=B8=B1?= =?UTF-8?q?=E0=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Controllers/OrganizationReportController.cs | 39 +- Models/HR/ProfileEducation.cs | 2 + Models/MetaData/PositionLevel.cs | 5 +- Report/Organization/rptAccount2.trdp | Bin 2932 -> 2961 bytes Report/Organization/rptAccount3.trdp | Bin 2528 -> 2543 bytes Services/OrganizationReportService.cs | 1219 ++++++++++++------- 6 files changed, 780 insertions(+), 485 deletions(-) diff --git a/Controllers/OrganizationReportController.cs b/Controllers/OrganizationReportController.cs index e7310c4..6c071b2 100644 --- a/Controllers/OrganizationReportController.cs +++ b/Controllers/OrganizationReportController.cs @@ -108,7 +108,7 @@ namespace BMA.EHR.Report.Service.Controllers }); } - var items = result_data.OrderBy(x => x.GovernmentCode).ThenBy(x => x.PositionNumberInt).ToList(); + //var items = result_data.OrderBy(x => x.GovernmentCode).ThenBy(x => x.PositionNumberInt).ToList(); var rptFile = Path.Combine(_hostingEnvironment.ContentRootPath, "Report", "Organization", $"rptAccount1.trdp"); ReportPackager reportPackager = new ReportPackager(); @@ -118,7 +118,7 @@ namespace BMA.EHR.Report.Service.Controllers report = (Telerik.Reporting.Report)reportPackager.UnpackageDocument(sourceStream); } - report.DataSource = items; + report.DataSource = result_data; System.Collections.Hashtable deviceInfo = new System.Collections.Hashtable(); InstanceReportSource instanceReportSource = new InstanceReportSource() @@ -130,7 +130,7 @@ namespace BMA.EHR.Report.Service.Controllers ReportProcessor reportProcessor = new ReportProcessor(_configuration); RenderingResult result = reportProcessor.RenderReport("PDF", instanceReportSource, deviceInfo); - var first_record = items.FirstOrDefault(); + var first_record = result_data.FirstOrDefault(); var content = result.DocumentBytes; return File(content, "application/pdf", $"รายงานบัญชี1_{first_record.RootOcName}_.pdf"); @@ -141,17 +141,18 @@ namespace BMA.EHR.Report.Service.Controllers } } - /// - /// รายงานบัญชี 2 - /// - /// รหัสสำนัก - /// - /// เมื่อแสดงรายงานสำเร็จ - /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง - /// ไม่ได้ Login เข้าระบบ - /// เมื่อเกิดข้อผิดพลาดในการทำงาน - [HttpGet("account2/{id:length(36)}")] + /// + /// รายงานบัญชี 2 + /// + /// รหัสสำนัก + /// + /// เมื่อแสดงรายงานสำเร็จ + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + + [HttpGet("account2/{id:length(36)}")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] @@ -211,7 +212,7 @@ namespace BMA.EHR.Report.Service.Controllers } - var items = result_data.OrderBy(x => x.GovernmentCode).ThenBy(x => x.PositionNumberInt).ToList(); + //var items = result_data.OrderBy(x => x.GovernmentCode).ThenBy(x => x.PositionNumberInt).ToList(); var rptFile = Path.Combine(_hostingEnvironment.ContentRootPath, "Report", "Organization", $"rptAccount2.trdp"); ReportPackager reportPackager = new ReportPackager(); @@ -221,7 +222,7 @@ namespace BMA.EHR.Report.Service.Controllers report = (Telerik.Reporting.Report)reportPackager.UnpackageDocument(sourceStream); } - report.DataSource = items; + report.DataSource = result_data; System.Collections.Hashtable deviceInfo = new System.Collections.Hashtable(); InstanceReportSource instanceReportSource = new InstanceReportSource() @@ -233,7 +234,7 @@ namespace BMA.EHR.Report.Service.Controllers ReportProcessor reportProcessor = new ReportProcessor(_configuration); RenderingResult result = reportProcessor.RenderReport("PDF", instanceReportSource, deviceInfo); - var first_record = items.FirstOrDefault(); + var first_record = result_data.FirstOrDefault(); var content = result.DocumentBytes; return File(content, "application/pdf", $"รายงานบัญชี2_{first_record.RootOcName}_.pdf"); @@ -315,7 +316,7 @@ namespace BMA.EHR.Report.Service.Controllers } - var items = result_data.OrderBy(x => x.GovernmentCode).ThenBy(x => x.PositionNumberInt).ToList(); + //var items = result_data.OrderBy(x => x.GovernmentCode).ThenBy(x => x.PositionNumberInt).ToList(); var rptFile = Path.Combine(_hostingEnvironment.ContentRootPath, "Report", "Organization", $"rptAccount3.trdp"); ReportPackager reportPackager = new ReportPackager(); @@ -325,7 +326,7 @@ namespace BMA.EHR.Report.Service.Controllers report = (Telerik.Reporting.Report)reportPackager.UnpackageDocument(sourceStream); } - report.DataSource = items; + report.DataSource = result_data; System.Collections.Hashtable deviceInfo = new System.Collections.Hashtable(); InstanceReportSource instanceReportSource = new InstanceReportSource() @@ -337,7 +338,7 @@ namespace BMA.EHR.Report.Service.Controllers ReportProcessor reportProcessor = new ReportProcessor(_configuration); RenderingResult result = reportProcessor.RenderReport("PDF", instanceReportSource, deviceInfo); - var first_record = items.FirstOrDefault(); + var first_record = result_data.FirstOrDefault(); var content = result.DocumentBytes; return File(content, "application/pdf", $"รายงานบัญชี3_{first_record.RootOcName}_.pdf"); diff --git a/Models/HR/ProfileEducation.cs b/Models/HR/ProfileEducation.cs index cc93425..b2bd96c 100644 --- a/Models/HR/ProfileEducation.cs +++ b/Models/HR/ProfileEducation.cs @@ -40,5 +40,7 @@ namespace BMA.EHR.Profile.Service.Models.HR public virtual List ProfileEducationHistorys { get; set; } = new List(); public virtual Profile? Profile { get; set; } + public virtual Guid? ProfileId { get; set; } + } } diff --git a/Models/MetaData/PositionLevel.cs b/Models/MetaData/PositionLevel.cs index 54ca1a5..e86140a 100644 --- a/Models/MetaData/PositionLevel.cs +++ b/Models/MetaData/PositionLevel.cs @@ -12,7 +12,10 @@ namespace BMA.EHR.MetaData.Service.Models [Required, MaxLength(100), Column(Order = 2), Comment("ชื่อย่อระดับตำแหน่ง")] public string ShortName { get; set; } = string.Empty; - [Column(Order = 3), Comment("สถานะการใช้งาน")] + [Column(Order = 3), Comment("ลำดับชั้นของระดับตำแหน่ง")] + public int Level { get; set; } = 0; + + [Column(Order = 4), Comment("สถานะการใช้งาน")] public bool IsActive { get; set; } = true; } } diff --git a/Report/Organization/rptAccount2.trdp b/Report/Organization/rptAccount2.trdp index fc447cc67f7ddefc1da14055932fd4d8d8faff8e..072dc4d1c3fbd92e339313e9e1a1544ba8dfa9ba 100644 GIT binary patch delta 2635 zcmV-R3bgg~7LgYhP)h>@6aWAK2mmOg(^epjb0yRX008Qd7d3y|#ub3y3-mt_EKnps zL-8t7$!-GgI$JLquZ`6@eWsI=8&Vq;mpS~XU;jJ-TCNjYI6^OH@948mzM;Q=YTVE$CfkM z#r@lXXzt@|OPQlci3qG)cXWbV@?zHD&>F}OCS(KHYBuG5G zDaY*``d~W8hp=$loPZm^90P9%Mm}sXcLP|HQ-7D2g+703P;~DZSuGZZWn=~76DQ!z z-*eBBCsPzbla0}oPi2dO-j~sdPryA~)I@y!#GRp%tf{EA z;5vSMgOeNF(Dcl^3+M18Jb%V>L+cOlwA7#ZJhy-6+T&gRz_jOp=X&`j^l%%p!`q9; zcYQ++-w~;w8S>o&3)thiaO}GNtr28JF;mv5auP&3_>c99|&QtqXAiC{|D z`t`5Qu73bOu6=+>{RzTF^q6|(J*HB63`*H^J)}~irl6-By0$e&-|~HTniiwJhzrM2 zN5y}o3X%J+?Rt^OJ=+}JUy6*2k;u3Zi;PPZBJqgDxJFMF3B-j+96pSN;p4TuN`j{4 z5Rn93HFoItJkGuAb)-^0r4F;p}1g=n&@phFcjU9O?y z38vv6Velppgid?g5QeXv9tzJ64!b^UP2AaoSVTb~9DK0WRx`{`sO_u5` zc*xpPy`=EOe7r+AoH+Si()&O~13%IglF_cC`hqy<*K|~VX<2xU)}w``tM_@a_iRn? znI_jxIk@Kpr$jsF{ju|vp;mweAc>VI+ z84B}fbd(#KKSMI0Hrf=2hQge!oyC8wc21K;$kpY0G!z!b=_o%mTUu5GrPd{OL0g)I zhdT-mP4Pfd2A5?_vlUoJp^-#Es&oA0V}k|9&vzJyZ}E&&NWEHSKb6g6iG7XhzlkqF z{E*uE5}QcRNy=E1XG{ZS&}w2KIdrnXWKF8XMn@UUZ&tIl zR2C)KQnD0LQ1wA2Sy|l^Ji%=IK%ny)IhYVVUlY8&$OO5obry4pcY>^)UT)(?uds6? zxpE!&re%}cIUr@r?HuE5l~sSXaumF&qM#T9B)BX)Ooa9xx<+L6-*)E~y79+nV6^b9 z2XOrNP3O0s`w$}IEnxAQGdguWyk7u=isWus`-~%MM38^LDDT6dsG^9f zL&skmR^9MgFs$gFc!Db;tAzsA$)j1z=}o4FoZ0lYiTscbc@m#|b_)fcPrw6Ux8#Q! zOJ@9RCO@Jo*8qf*n-v;B$6#uD_gj)fjUqF0Hj|us&6D3%L9>YPrt4PgGODYJ;j@YO z6gC=@{N%F1EATm3*mi$}P9s*dZsZ*>T2@sy`F+O~uv`Zd4>U%l8`%a7m6e@_I0Z9r z(KK=!9)XALW+;v7^I%fAPZ>uo-98#~`*fDAdbbZwz#KG&3;BK8 z>nG;==_ErGn+WG(HrG$s_tTys=Kk4AhR{ZW=4uEHS$l+-AEhn4;#nF{U~!P17n zN57Rk=Wd%b;QfEja>mHInV2?wG}9T+NAPs&8*uH#)Y(VB#0(!ZDGz7n2qP$>2JAyT zEN9^^=2&1tK=J@LO>bg3%S^lE#GNDuN{}@q<~Vt(s2IOA_&DkQxY$d3EGs)o6HFd1 zI)%qzcnW}@d*PJo478jdXmWp$cZR@*z3+PYyh6A>PA+h$ z06Q0wfJSA{Bwv-X+Bf{E9kWB+ow!}xp7inJ^0EVVpek9+((1Sr12jR$ne<3}ElRq~ zHZOC!md8n<9-)%R^vmes>FINNdHP&#UT&l$C7D!o7xrOc5o^(wSQ0HUxP{8h$X%z} z%!s|X>db$TO!84OEthd)2*#iW8zOVJWKzC0S~0jMsZC&7VGYSp+6+%*p%Bd2XdG)Kh($wg3PC69AJN t3epWIq|;U)jdLZ`2><} delta 2591 zcmV+)3gGpT7xWevP)h>@6aWAK2ms@rtyX{M>ixF~006g<7d3y=MihYGEA>BEsZ>#^ zIKIYC*#)t?Y+03?HcR_#k|As1*pcJF(x=iQ(N^k93#w?PsuZD0Af&c{@ctYBl+KJV zvB%eVvr8Q2f#9(x$K#pLXU?2+CcAd-U}P}2fj!YJbG^m0T#Er_-x}!VaJ@BkZk|?K z=gxlk!P+huTeg40e5DVZeOOP@%@%Xr)Sat0F9U5dwZVF8$L#O7m@C={9@}H*e7|o^ zO^0tW@D}D|y|wQ+8sy)5Ojdsjgkc$Rf%wE8IB+(sgYd~j zk(C9tKWas?IacWi=)@&(6BlI;U*EIFs3gb|Dt)OLQ+RLB{mpa#_1vF4_ealt=ZJADRgT0GP zPqVcfQ*&p}JAB+?divM!G~XFJEoQ?q2J5YD&6t0H7Sm2Pp^e)RAKrE_zKa`j_>S%bUH*j>wVuJ+Lb5d9>qNIyjnK6~qwt`zI0sEb5atk(Dd;JCmZ1;Ow;abBMMb|ag2JxfQ9&t34FES_uB7;(nNIYTzuKttx0&&3?hYtf`_;?|&5-ZCIM0i$F)EOcX zLbz!Xs|uY2Cr~TC#k%I@X{@a7VYT>-z(b~ZG!qYj^(V_5IwV$BgaSJ5V;X+(+`sX` z&z}35AfrRcXeJpvD<}nIC@jwxk&$7n#AbgPWEDL_)>6)Nqfly^NsYh?YSDC~vZ7jq z&1||UMd&+hhzBNn+=BTHTh6aTYyD|tTN99}6tbp5Ryb+#9NX!r^&tz^T&5V_=1oTGR&6OTxn%+yP;M2heb&NHL5UD?-q1=@D zGk6thqh)buh}7BISj-CNG=YO$9lw7^L!@DxhVoNpOA8_^7P`caXiL-Za6`cXn2n0iyS}6*kH=>^Bm*wH=dDFsaLb?r>uD_w6AgfSHUHSA5vQnv5EAA zq>M&+R+KWlW)qJUGX{QvMgN!-aNh-Sfb?3A#)X;+95kZDg1C^Nu##8++)IBv3qJB` zBfJ9-uyT4FDyp}*HfeuLG-kA_=%{R0E{KIB(1`;RH>pA!9c3`Tn$OmfXq03{$r3qM zQo6Zh#dVK+AG7fvfzC_hU_$i#O7QkH7Ua&?S=1%o2(s4NiH#fW)Xt6Y$`)`m-5|Gf zK+0y@IR^16^K9ivc~d!7RJ(sja8`C02kkv{jmYZ1W=(W-;|m9%KXvrmaQrtl^K;v} z1Cg<(uz23=?^`zBF9QXA8uTb>rz}+bfm{W<+ek|H1o(ZI(hL_B;>_ak>03 zyVjj6)6orJpZX-l3@rBcAv3q4(Wyj{&AKdstkhLS@mWTEQX7p)eiGT> zIrwZ(4Z}yL5-V~u@(zC}E%Pdy29;51Mz#S(Wp1Y-PQgrCG?mqboF2a`TL9WC@N zV>&W7(a$Qw#|(eVy|LEE1ahbWn-CA(oLbWf78nu`KEP$o9_r>SZ7w`=1V+ZWpvCdc2@K z>wq<=Nv7kdIxYnO4bgEd*AZXyGbrQDi=8gyahR${Xe2V1(tr5!TsS2=7cMdDR??BY zKq|T;JEX9Pg=kAGsVvL4hRTe|U8LHKi9NdNjFC+8kueKraig+ow*VU=4L4&BzS^HN zQpZbGV48np(xoUZ2TGYnT{qvTtD%Qviq6WSlUh7>^B0db(CJWgRuY}8EH|Yf%dG}F z3Poon(aDGcEBSfkHYoTU;_61AmQ6Q>f@MEpo$ zp>CRkCaRuRm#6t6dGlLI5?!0ECOTQ!+)92ncMX4XDlN^Z+G!v=8969Qer|USbSf>) zC^}1zPBOmdpGn70V)2};n2R5A@k4v5Kulg>kS78$iF%o#;V<=xe!~En;~q3DA%tu- z(Lld>Q6P>u$y_)X+hF4V1=!hAVJE>wAUGx?IFlQ_;*T?YMJ8p`jbBv=U)9=`$Tv=D z965jf9}~MWI-{DYvPesX?^1GBlbp2srrQzo{#ISK_hueHpt>|`rRydf0Yf*VG!}~0 z0hIPkDOCfB(z!}wCdhOj&k$QN${HL+nCBR`J+UaEv-)t-TAzmhGJVA5cpJ1QY-O z00;o%o~@H93gHdoo~>4Y=j#2p2><}MlNSpw1LK~plSvC30{;n@6aWAK2mmvr(^fozTnsV@002sn7c+lbkJCmJ$KNaUJ6NuS zKrN21u>)DqUfAxcu&g!BA42JD`7WJ1+CN(Q)_Sd9q=#%ni$Muiw4~^uf>pOYElA-eZ|9y$8!q-(7CE z?V;rgECVlL4VKtF*X>`Z)duZ7(9;K;3rye``&`@Z)f{XcUb80hqEr(&frS@knC7Mn zdIMa9m2JHXHh|s%P7AbM*kEP@7~MU0i50mzYEW?PK6!syXbjs(8pH>7!GXJCA4ENq zB#sx`JvKJYb7~zQxC(CLs={lix@-4QO;lu5yQ!N)cxm5z=6iqp-VeU_z3=_wAKmx8 zr~c7n-+P1#@S~&eaQOi)yz#w1@n3lI{jhrUt?#|WpFZ)uxA=tMyKk|zm%eux7>v5> z1|3Lr68C?r<=!&^gL=1Y8eKTItH5%B1DguqNVjz}JbcaQbWD)`GW`0wZMoqEb~l)o z?&!CM*5jp4818&E*-Ro`CYhrN4Q!=>m zaE)#pwIL@4Hy&7t(}Wb*f8nuvg7JQK=A(nPi}26#MKr(&^vA@A$#WkudBTW6D=W5x zyh6|v)XSD_8Xfd4*R^|bH5iMqvJ(tcSj#cFYMZtbm|QXS_WsCZSPe{umC$5Z%Q1;( zEQEhN=viP8R|0dm7#hRnSs)^FikiCr1Wr}85h5ZdYV{ZsnbX92iWBI{{>69KtMm9) zgEyiF=^^k?C>~YCgRjd4c+@#f(F*W*h;jJI_nzazkG}VgK%-94s3sZ$C#nTx#A{Cu z85to?VwpMm1}{Mm^41%bQd3Q86i$=Hf{=eiRJnR$!5NE7AT7U#@f~91B?ieOgJYiJ zQB6EzCo=LXp&JPMV1O&ZVf+{b?r_Ur7GEK)e|`ESFIAb>$;2nOh5;)m3roK=%E zq^2uH>W9L~`H;QBPU&et7$KHD!twMWE^Woy2c%l73`EFX=2Pw*QZ6~h!npGjMCcoB#d_N z^-n<1#0PCCL5oPxghdOh;N=mz3hn@NdWI%uaVbNK$q6om7q+Qebs5LM`3YoqH^^ZaY04e(fv%!WRGabR^a1{`?n3X$A^-O6ZP`B3XRh zw%zd;#CT3lzaW-6O^8~Qyb89~0xo(jZNO~nec*g%SRLe9y1EIwrdyps8y=43M%x_r ztX1^V8|-FOZ}s&yMv#9;4OoSE7}n4p4zR(9fT#o4bf;@rBMCk_a3g;CNmP)Tov2qq zHN07HIU4@3T8l?4X*mz zliX|p6OO*^q!SJ>HjO@DPz4SyBmvFJica1tS!Zv!Ju_s7xH^Avxv)KP_rm&U0GiO1 z4EyovxE2D`Mdd`^1b-IfW0K8F94_RsJ9Zx7lE}PF(D})^88tgOlklh|ounX=j_$-N z1U4}fZ;35U${9}KG81-Z={6H)PwqMsB$Iq(tj1Z~WNGGVfoMJjJZc$ujuEd>bQS}h zj69y2pUBIK;~;-LZoCgD2a`lS(P_mg-aqC6m3{y{i>T}EC=F8{DOsle=~M!hwb@j) z{N3j9mo{0U=$uM)vJ%2-enxl-a_V#)JGJbLOYLfYf_MscN(I!EorPy7Eoucv#zljK zh>;~U1TsUQXN{>3d1{zIs1K?0G6m6_#=y8`g3Ngj8l+eIgDrR}T6P z7z95`HHz&vJ84aav=JW3m28Cfso9Y4y-q9Il+bLZdNfU_oYOe5=$$ZoYJ5hySY?)> ziqN3soKA8ww7*7OB7S@0MB1NNN;qDi4H6}1j#|wzbsBA9Sh``sc`ywt&izriW(Ze? zZj*LPC)Z7FN-b&BEme)2W4&2)d~B3bF*L=dYS?5cHrfmY8>M>bb4t!)={1U4q}XKt z=GIIlo20f9meD{oYr!vrU-}PFO9KQH0000805hc1lXwW>4Kt+ERy=`R3^E7+07{c) w2`?Wrq|;W2{PcO10002C0000J0000000000000000D6<{90NYFy^8f$< delta 2207 zcmV;Q2w?Z`6W|jUP)h>@6aWAK2mnq|&Q{~23Hl=l0023W7c+ldZ_`#7$L}ZYJ6N8C zKpT!E%eGTZNu>+Ra4XeA$GMoAUmYtz{x!bkJ zmMgFfyo5DcVs~A4_-Ugt>h6MpKH^+p0>{|ny7r*qVC(Rj4Ure6hQJ9dyePx8H(W3n z;UcVT>3y&c^d4|JpzFd0GwZl5h}os4!_0a2e|OY_x`|t;mP-d>ftxO_Y!~l#P{Cf6UcYpVrwsb?|>K#yX%q; z#5#%l)p39CnSepPyKEYLIJYana)ASz3gAe0bu&18&FJ+^ko+?I`kHOI!3B2KnU3!0 zx5n1Sj(>Q-G9BY9cvxr-U6xt4&E68brkf+cGL2*t8n_Md!EOYjJ+}#fzzWUS1T3BT za%{U7@K7D#+4w0O>EC_tAs*2ecplIYl9QQ_nKgd{n7t9VZQJhkF6uQkxZ)`p+-SHa zH;&qpV}lzFti)+T0_;EW*ge5`KRff${^|wz=kf(KzzFom)QHI^K4Nmgh(RmMwu8I^ zX$tCP$2N@~`j+e3gQ!ZzBB*SWfeLCFCRc3Jc8JMkQ}6CgOa@hAGN=S5gIb13JYxam zq-TG`Ag&N|xEL72<#`|?bBda{{{&7|wFx33Cu+?I6PeS*W`Yyw%KpK3*Q@jRR)aU9 z2kD{kP-;A?iU;46bMR<#nxf_4@et$iqwhV(g&%zH9fd}-Mx&Z&2%MH6GQ( zBXS}WuM)Tsa#2a-cwUb1h~NqMI7{uw80j1x+83gMyL5tN%r;OhuEjTV1}f=(r*0#% zA$^5!rbFy%e?f&A_Ms=g5v^~v`Ru$oMQP?O;5^q7#ZsYvDkxamIEZf@L(K!-qws(4 zJAC$=kTqC1px~0~;IN`_$($r;d2q>`tmbVTO2LJ9oJ8x%0I1%0RumwSQ}Xtmf(BRq zyzRx$*sZ+ALE^7)7ZLYE#jBcB>sb}$1_>5Qo}MLelBDE-gQ-aqK1)y|)znmz8oV5- zdEqn)hNSFx`UM8!IbM^db3FHPg#CXyeI*MO4t)OG;3Ehi$qc~&eMmro^r`<>-!W&bW@bHsW;Od4+ zr^k6t=7mXuyca*|D9Q1u^dZklEo7I@9`YQyUYM0-w(Yx{ zMMcWz*5HCWXIOW`y{%q9z`5|kpew!uJm_NHJehfblq zfLc<6vuNN&8gVHLbQLRY~ZV9w4^VHUS$XfYY0a=4TmLYjH2G(&%A%4SEX-e^@4 zp=c+S;f54gEk>xLo4RvvHgcMUl6Otce@_lAcqer2@F-Hj*KFIJejkkIqb@ugsf)Hb9#|{r9XHs`u-+N!T}&X4 z8n6QKFs!jX9$|wa0bzd!uIWzSuqKLoc;H6#u9K)BGuvUWNHw@Oa5)_QpxTH=EN+`5 z48qQlLwF84y8yW1SMZVTacpMVQxmnN_t2|>;q4lmXfZj_^dz@Cz=Wf3JIVY43`N5a z7*v6S3rRq;vaHj$O4`}$?!XM#p{`C{E@)5Gy`VlBfHw3b<6(bvI<5r(^-(#NCc&SP z^h>;XvBSAM_NUIHJQAITA)PNy#i;4In3w}C=_3V^c67%U9k7YHcuQ=lC`CAf%Z%Bb zr`wE~J-+LVkxcWEviPQPlO~a?IU4y4@Tg_rIl>}aqq7+3q@?ZC?7UrC*aqQoqp-gm zOj7NMPAg8)b}@eosO0nJX+&M`hFO>LNXc^TpH3xEX?sgm%idfbeQA@G8l6*#PFns~ z%}xN%Ku)t>$4)If)5^Mr)ERH<~plrQ$n+u=}9!9a!%veqIb;fsqq=*VwHJ@DnhF!=X8>jqW!g+67^FX z$I|}9Qo`{9ZIEhmPEe~kqE4eN3`;jGI1i>_MY+Ekt~tV$qT3|h((!ehQcGIxma0b1 zkzOP^IyOE^sTjJ(rfS%vDK^?11skP$>GPVL#nNjOHBYfg|B0=+N;YwAB`BkTXgA0Y zfnWR=P)h>@6aWAK2mnq|&Xb1-;SEkv&Q{~23Hl=l0023YbqOyYPEpQQi2U?h($ hwg3PC6951J0000000000003)~!wDt^O$h)1000*lKv4hy diff --git a/Services/OrganizationReportService.cs b/Services/OrganizationReportService.cs index ff311f4..4f3401c 100644 --- a/Services/OrganizationReportService.cs +++ b/Services/OrganizationReportService.cs @@ -1,8 +1,10 @@ using Amazon.Internal; +using BMA.EHR.Core; using BMA.EHR.Extensions; using BMA.EHR.Organization.Service.Extensions; using BMA.EHR.Profile.Service.Services; using BMA.EHR.Report.Service.Data; +using Microsoft.CodeAnalysis.CSharp; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Storage.ValueConversion.Internal; using System.Linq; @@ -10,600 +12,887 @@ using System.Security.Cryptography.X509Certificates; namespace BMA.EHR.Report.Service.Services { - public class OrganizationReportService - { - #region " Fields " + public class OrganizationReportService + { + #region " Fields " - private readonly EHRDbContext _context; - private readonly EHRDbContext _applicationDbContext; - private readonly ProfileService _profileService; + private readonly EHRDbContext _context; + private readonly EHRDbContext _applicationDbContext; + private readonly ProfileService _profileService; - #endregion + #endregion - #region " Constructor and Destructor " + #region " Constructor and Destructor " - public OrganizationReportService(EHRDbContext context, - EHRDbContext applicationDbContext, - ProfileService profileService) - { - _context = context; - _applicationDbContext = applicationDbContext; - _profileService = profileService; - } + public OrganizationReportService(EHRDbContext context, + EHRDbContext applicationDbContext, + ProfileService profileService) + { + _context = context; + _applicationDbContext = applicationDbContext; + _profileService = profileService; + } - #endregion + #endregion - #region " Methods " + #region " Methods " - #region " Report Query " + #region " Private " - public async Task?> GetOrganizationTypes(string type) - { - var Organizations = await _context.Organizations.ToListAsync(); + private string GetShortNameFromPosNo(string posno) + { + if (string.IsNullOrEmpty(posno)) return ""; + var posArray = posno.Split('.'); + var ret = string.Empty; - var OrganizationOrganizations = await _context.OrganizationOrganizations.ToListAsync(); - var OrganizationTypes = await _context.OrganizationTypes.FirstOrDefaultAsync(x => x.Name == type); + for (var i = 0; i < posArray.Length - 1; i++) + { + ret += $"{posArray[i]}."; + } - if (OrganizationTypes == null) - { - throw new Exception("Invalid Organization type."); - } + return ret; + } - var dataType = (from o in Organizations - join os in OrganizationOrganizations on o.OrganizationOrganizationId equals os.Id into os1 - from os in os1.DefaultIfEmpty() - where o.OrganizationTypeId == OrganizationTypes.Id && os != null - orderby o.OrganizationOrder - select new - { - organizationId = o.Id, - organizationName = os.Name - }).ToList(); + private int GetPosnoIntFromPosNo(string posno) + { + if (string.IsNullOrEmpty(posno)) return 999; + var posArray = posno.Split('.'); - return dataType; - } + return Convert.ToInt32(posArray.Last()); + } - public async Task> GetReport1Query(Guid ocId) - { - var ocIdList = _profileService.GetAllIdByRoot(ocId); - var RootOcName = _profileService.GetOrganizationNameFullPath(ocId, false, false); + private Guid GetOcId(Guid shortNameId, Guid nameId) + { + var data = _context.Organizations.AsNoTracking() + .FirstOrDefault(x => x.OrganizationShortNameId == shortNameId && + x.OrganizationOrganizationId == nameId); + if (data == null) return Guid.Empty; + else return data.Id; + } - var organizationPositions = await _context.OrganizationPositions.ToListAsync(); - var positionMasters = await _context.PositionMasters.ToListAsync(); - var organizations = await _context.Organizations.ToListAsync(); - var organizationOrganizations = await _applicationDbContext.OrganizationOrganizations.ToListAsync(); - var organizationShortNames = await _applicationDbContext.OrganizationShortNames.ToListAsync(); - var positionNumbers = await _context.PositionNumbers.ToListAsync(); - var executivePositions = await _applicationDbContext.PositionExecutives.ToListAsync(); - var executivePositionSide = await _applicationDbContext.PositionExecutiveSides.ToListAsync(); - var positionPaths = await _applicationDbContext.PositionPaths.ToListAsync(); - var positionPathSides = await _applicationDbContext.PositionPathSides.ToListAsync(); - var positionTypes = await _applicationDbContext.PositionTypes.ToListAsync(); + private string GetCitizenId(Guid profileId) + { + var data = _context.Profiles.AsNoTracking().FirstOrDefault(x => x.Id == profileId); - var data = (from op in organizationPositions - join pm in positionMasters on op.PositionMasterId equals pm.Id - join oc in organizations on op.OrganizationId equals oc.Id - join oc_n in organizationOrganizations on oc.OrganizationOrganizationId equals oc_n.Id - join sn in organizationShortNames on oc.OrganizationShortNameId equals sn.Id - join pn in positionNumbers on op.PositionNumberId equals pn.Id - join pp in positionPaths on pm.PositionPathId equals pp.Id - join pps in positionPathSides on pm.PositionPathSideId equals pps.Id into pp_pps_join - from pp_pps in pp_pps_join.DefaultIfEmpty() - join ex_p in executivePositions on pm.PositionExecutiveId equals ex_p.Id into pm_exp_join - from pm_exp in pm_exp_join.DefaultIfEmpty() - join ex_p_s in executivePositionSide on pm.PositionExecutiveSideId equals ex_p_s.Id into pm_exp_s_join - from pm_exp_s in pm_exp_s_join.DefaultIfEmpty() - join pt in positionTypes on pm.PositionTypeId equals pt.Id - where ocIdList.Contains((Guid)op.OrganizationId) - select new Account1ResultItem - { - Id = op.Id, - RootOcId = ocId, - RootOcName = RootOcName, - OcId = op.OrganizationId.Value, - OcFullName = _profileService.FindOCFullPathWithNewLine(op.OrganizationId.Value, false, suppress: RootOcName), - OcName = _profileService.GetOrganizationName(op.OrganizationId.Value), - ShortName = sn.Name, - PositionNumber = pn.Name, - PositionLevel = _profileService.GetPositionLevel(pm.Id), - PositionName = $"{pp.Name}\r\n", - PositionSide = pm.PositionPathSideObject is null ? "" : Newtonsoft.Json.JsonConvert.DeserializeObject>(pm.PositionPathSideObject).GetNameList(), - PositionExecutive = pm_exp == null ? "" : $"{pm_exp.Name}\r\n", - PositionExecutiveSide = pm.PositionExecutiveSideObject is null ? "" : Newtonsoft.Json.JsonConvert.DeserializeObject>(pm.PositionExecutiveSideObject).GetNameList(), - Remark = op.PositionUserNote, - OcOrder = oc.OrganizationOrder.Value, - PositionType = pt.Name, - IsDirector = pm.IsDirector.Value ? 0 : 1, - GovernmentCode = sn.GovernmentCode == null || sn.GovernmentCode == "" ? sn.AgencyCode : sn.GovernmentCode - }).ToList(); + return data == null ? "" : data.CitizenId; + } - return data; - } + private string GetPrefix(Guid profileId) + { + var data = _context.Profiles.AsNoTracking().FirstOrDefault(x => x.Id == profileId); + if (data == null) return ""; - private string GetShortNameFromPosNo(string posno) - { - if (string.IsNullOrEmpty(posno)) return ""; - var posArray = posno.Split('.'); - var ret = string.Empty; + var prefix = _context.Prefixes.AsNoTracking().FirstOrDefault(x => x.Id == data.PrefixId); - for (var i = 0; i < posArray.Length - 1; i++) - { - ret += $"{posArray[i]}."; - } + return prefix == null ? "" : prefix.Name; + } - return ret; - } + private string GetFirstName(Guid profileId) + { + var data = _context.Profiles.AsNoTracking().FirstOrDefault(x => x.Id == profileId); - private int GetPosnoIntFromPosNo(string posno) - { - if (string.IsNullOrEmpty(posno)) return 999; - var posArray = posno.Split('.'); + return data == null ? "" : data.FirstName; + } - return Convert.ToInt32(posArray.Last()); - } + private string GetLastName(Guid profileId) + { + var data = _context.Profiles.AsNoTracking().FirstOrDefault(x => x.Id == profileId); - private Guid GetOcId(Guid shortNameId, Guid nameId) - { - var data = _context.Organizations.AsNoTracking() - .FirstOrDefault(x => x.OrganizationShortNameId == shortNameId && - x.OrganizationOrganizationId == nameId); - if (data == null) return Guid.Empty; - else return data.Id; - } + return data == null ? "" : data.LastName; + } - private string GetCitizenId(Guid profileId) - { - var data = _context.Profiles.AsNoTracking().FirstOrDefault(x => x.Id == profileId); + private async Task> GetAllIdByRootAsync(Guid id) + { + try + { + var ret = new List(); - return data == null ? "" : data.CitizenId; - } - private string GetPrefix(Guid profileId) - { - var data = _context.Profiles.AsNoTracking().FirstOrDefault(x => x.Id == profileId); - if (data == null) return ""; + var oc = await _context.Organizations.FirstOrDefaultAsync(x => x.Id == id); + if (oc == null) + throw new Exception(GlobalMessages.DataNotFound); + ret.Add(oc.Id); - var prefix = _context.Prefixes.AsNoTracking().FirstOrDefault(x => x.Id == data.PrefixId); + var child = await _context.Organizations.AsQueryable().Where(x => x.ParentId == id).ToListAsync(); + if (child.Any()) + { + foreach (var item in child) + { + ret.AddRange(await GetAllIdByRootAsync(item.Id)); + } + } - return prefix == null ? "" : prefix.Name; - } + return ret; + } + catch + { + throw; + } + } - private string GetFirstName(Guid profileId) - { - var data = _context.Profiles.AsNoTracking().FirstOrDefault(x => x.Id == profileId); + private async Task> GetAllOcItemByRootAsync(Guid id, int level = 1) + { + try + { + var ret = new List(); - return data == null ? "" : data.FirstName; - } + var oc = await _context.Organizations.FirstOrDefaultAsync(x => x.Id == id); + if (oc == null) + throw new Exception(GlobalMessages.DataNotFound); + var thisLevel = (level * 10) + oc.OrganizationOrder.Value; + ret.Add(new OrganizationItem { Id = oc.Id, Order = thisLevel }); - private string GetLastName(Guid profileId) - { - var data = _context.Profiles.AsNoTracking().FirstOrDefault(x => x.Id == profileId); + var child = await _context.Organizations.AsQueryable().Where(x => x.ParentId == id).ToListAsync(); + if (child.Any()) + { + foreach (var item in child) + { + ret.AddRange(await GetAllOcItemByRootAsync(item.Id, thisLevel)); + } + } - return data == null ? "" : data.LastName; - } + return ret; + } + catch + { + throw; + } + } + + private async Task GetOrgIdByOrgPositionId(Guid orgPositionId) + { + var data = await _applicationDbContext.OrganizationPositions.FirstOrDefaultAsync(x => x.Id == orgPositionId); + + return data is null ? Guid.Empty : data.OrganizationId.Value; + } + + #endregion - public async Task> GetReport2Query(Guid ocId) - { - try - { + #region " Report Query " + + public async Task?> GetOrganizationTypes(string type) + { + var Organizations = await _context.Organizations.ToListAsync(); + + var OrganizationOrganizations = await _context.OrganizationOrganizations.ToListAsync(); + var OrganizationTypes = await _context.OrganizationTypes.FirstOrDefaultAsync(x => x.Name == type); + + if (OrganizationTypes == null) + { + throw new Exception("Invalid Organization type."); + } + + var dataType = (from o in Organizations + join os in OrganizationOrganizations on o.OrganizationOrganizationId equals os.Id into os1 + from os in os1.DefaultIfEmpty() + where o.OrganizationTypeId == OrganizationTypes.Id && os != null + orderby o.OrganizationOrder + select new + { + organizationId = o.Id, + organizationName = os.Name + }).ToList(); + + return dataType; + } + + public async Task> GetReport1Query(Guid ocId) + { + var ocIdList = _profileService.GetAllIdByRoot(ocId); + var RootOcName = _profileService.GetOrganizationNameFullPath(ocId, false, false); + + var orgWithOrder = new List(); + orgWithOrder = await GetAllOcItemByRootAsync(ocId); + + var organizationPositions = await _context.OrganizationPositions.ToListAsync(); + var positionMasters = await _context.PositionMasters.ToListAsync(); + var organizations = await _context.Organizations.ToListAsync(); + var organizationOrganizations = await _applicationDbContext.OrganizationOrganizations.ToListAsync(); + var organizationShortNames = await _applicationDbContext.OrganizationShortNames.ToListAsync(); + var positionNumbers = await _context.PositionNumbers.ToListAsync(); + var executivePositions = await _applicationDbContext.PositionExecutives.ToListAsync(); + var executivePositionSide = await _applicationDbContext.PositionExecutiveSides.ToListAsync(); + var positionPaths = await _applicationDbContext.PositionPaths.ToListAsync(); + var positionPathSides = await _applicationDbContext.PositionPathSides.ToListAsync(); + var positionTypes = await _applicationDbContext.PositionTypes.ToListAsync(); + + var data = (from op in organizationPositions + join pm in positionMasters on op.PositionMasterId equals pm.Id + join oc in organizations on op.OrganizationId equals oc.Id + join oc_n in organizationOrganizations on oc.OrganizationOrganizationId equals oc_n.Id + join sn in organizationShortNames on oc.OrganizationShortNameId equals sn.Id + join pn in positionNumbers on op.PositionNumberId equals pn.Id + join pp in positionPaths on pm.PositionPathId equals pp.Id + join pps in positionPathSides on pm.PositionPathSideId equals pps.Id into pp_pps_join + from pp_pps in pp_pps_join.DefaultIfEmpty() + join ex_p in executivePositions on pm.PositionExecutiveId equals ex_p.Id into pm_exp_join + from pm_exp in pm_exp_join.DefaultIfEmpty() + join ex_p_s in executivePositionSide on pm.PositionExecutiveSideId equals ex_p_s.Id into pm_exp_s_join + from pm_exp_s in pm_exp_s_join.DefaultIfEmpty() + join pt in positionTypes on pm.PositionTypeId equals pt.Id + + join orgOrder in orgWithOrder on op.OrganizationId equals orgOrder.Id - var ocIdList = _profileService.GetAllIdByRoot(ocId); - var RootOcName = _profileService.GetOrganizationNameFullPath(ocId, false, false); + where ocIdList.Contains((Guid)op.OrganizationId) + select new Account1ResultItem + { + Id = op.Id, + RootOcId = ocId, + RootOcName = RootOcName, + OcId = op.OrganizationId.Value, + OcFullName = _profileService.FindOCFullPathWithNewLine(op.OrganizationId.Value, false, suppress: RootOcName), + OcName = _profileService.GetOrganizationName(op.OrganizationId.Value), + ShortName = sn.Name, + PositionNumber = pn.Name, + PositionLevel = _profileService.GetPositionLevel(pm.Id), + PositionName = $"{pp.Name}\r\n", + PositionSide = pm.PositionPathSideObject is null ? "" : Newtonsoft.Json.JsonConvert.DeserializeObject>(pm.PositionPathSideObject).GetNameList(), + PositionExecutive = pm_exp == null ? "" : $"{pm_exp.Name}\r\n", + PositionExecutiveSide = pm.PositionExecutiveSideObject is null ? "" : Newtonsoft.Json.JsonConvert.DeserializeObject>(pm.PositionExecutiveSideObject).GetNameList(), + Remark = op.PositionUserNote, + OcOrder = orgOrder.Order, + PositionType = pt.Name, + IsDirector = pm.IsDirector.Value ? 0 : 1, + GovernmentCode = sn.GovernmentCode == null || sn.GovernmentCode == "" ? sn.AgencyCode : sn.GovernmentCode + }).ToList() + .OrderBy(x => x.OcOrder).ThenBy(x => GetPosnoIntFromPosNo(x.PositionNumber)) + .ToList(); - var organizationPositions = await _context.OrganizationPositions.ToListAsync(); - var positionMasters = await _context.PositionMasters.ToListAsync(); - var organizations = await _context.Organizations.ToListAsync(); - var organizationOrganizations = await _applicationDbContext.OrganizationOrganizations.ToListAsync(); - var organizationShortNames = await _applicationDbContext.OrganizationShortNames.ToListAsync(); - var positionNumbers = await _context.PositionNumbers.ToListAsync(); - var executivePositions = await _applicationDbContext.PositionExecutives.ToListAsync(); - var executivePositionSide = await _applicationDbContext.PositionExecutiveSides.ToListAsync(); - var positionPaths = await _applicationDbContext.PositionPaths.ToListAsync(); - var positionPathSides = await _applicationDbContext.PositionPathSides.ToListAsync(); - var positionTypes = await _applicationDbContext.PositionTypes.ToListAsync(); - var profilePositions = await _context.ProfilePositions.ToListAsync(); - var prefixes = await _context.Prefixes.ToListAsync(); - var profiles = await _context.Profiles.ToListAsync(); - var report2 = await _context.Report2s.ToListAsync(); + return data; + } - var profile_data = (from p in _context.Profiles - join pf in _context.Prefixes on p.PrefixId equals pf.Id - select new - { - p.Id, - p.CitizenId, - Prefix = pf.Name, - p.FirstName, - p.LastName, - p.PositionLine, - p.Position, - p.PositionPathSide, - p.PositionType, - p.PositionLevel, - p.PositionExecutive, - p.PositionExecutiveSide, - p.PosNo, - p.OrganizationShortName, - Degree = p.Educations == null || p.Educations.Count == 0 ? "" : $"{p.Educations.OrderBy(x => x.StartDate).Last().Degree}\r\n({p.Educations.OrderBy(x => x.StartDate).Last().Field})", - Salary = p.Salaries == null || p.Salaries.Count == 0 ? 0 : p.Salaries.OrderBy(x => x.Date).Last().Amount, - SalaryPosition = p.Salaries == null || p.Salaries.Count == 0 ? 0 : p.Salaries.OrderBy(x => x.Date).Last().PositionSalaryAmount, + public async Task> GetReport2Query(Guid organizationId) + { + var organizations = new List(); + organizations = await GetAllIdByRootAsync(organizationId); - }).ToList(); + var orgWithOrder = new List(); + orgWithOrder = await GetAllOcItemByRootAsync(organizationId); + + var ocIdList = _profileService.GetAllIdByRoot(organizationId); + var RootOcName = _profileService.GetOrganizationNameFullPath(organizationId, false, false); + + var prefixes = await _applicationDbContext.Prefixes.ToListAsync(); + var organizationPositions = await _context.OrganizationPositions.ToListAsync(); + var profilePositions = await _context.ProfilePositions.ToListAsync(); + var positionNumbers = await _context.PositionNumbers.ToListAsync(); + var positionPaths = await _applicationDbContext.PositionPaths.ToListAsync(); + var positionLevels = await _applicationDbContext.PositionLevels.ToListAsync(); + var positionMasters = await _context.PositionMasters.ToListAsync(); + var profiles = await _applicationDbContext.Profiles.ToListAsync(); + var organizationShortNames = await _applicationDbContext.OrganizationShortNames.ToListAsync(); + var report2s = await _context.Report2s.ToListAsync(); + var positionPathSides = await _applicationDbContext.PositionPathSides.ToListAsync(); + var positionExecutiveSides = await _applicationDbContext.PositionExecutiveSides.ToListAsync(); + var positionExecutives = await _applicationDbContext.PositionExecutives.ToListAsync(); + var orgData = await _applicationDbContext.Organizations.ToListAsync(); + var positionTypes = await _applicationDbContext.PositionTypes.ToListAsync(); + + var raw_results = (from op in organizationPositions + where organizations.Contains(op.OrganizationId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : op.OrganizationId.Value) + join oc in orgData on op?.OrganizationId equals oc?.Id + join pp in profilePositions on op?.Id equals pp?.OrganizationPositionId into ppGroup + from pp in ppGroup.DefaultIfEmpty() + join pn in positionNumbers on op?.PositionNumberId equals pn?.Id into pnGroup + from pn in pnGroup.DefaultIfEmpty() + join os in organizationShortNames on pn?.OrganizationShortNameId equals os?.Id into osGroup + from os in osGroup.DefaultIfEmpty() + join pm in positionMasters on op?.PositionMasterId equals pm?.Id into pmGroup + from pm in pmGroup.DefaultIfEmpty() + join pPath in positionPaths on pm?.PositionPathId equals pPath?.Id into pPathGroup + from pPath in pPathGroup.DefaultIfEmpty() + + join ps in positionPathSides on pm?.PositionPathSideId equals ps?.Id into psGroup + from ps in psGroup.DefaultIfEmpty() + join pe in positionExecutives on pm?.PositionExecutiveId equals pe?.Id into peGroup + from pe in peGroup.DefaultIfEmpty() + join pes in positionExecutiveSides on pm?.PositionExecutiveSideId equals pes?.Id into pesGroup + from pes in pesGroup.DefaultIfEmpty() + + join pt in positionTypes on pm?.PositionTypeId equals pt?.Id into ptGroup + from pt in ptGroup.DefaultIfEmpty() - var report2_raw_data = (from r in _context.Report2s.AsNoTracking().ToList() - //join opos in _context.ProfilePositions.AsNoTracking().ToList() on r.OrganizationPositionId equals opos.OrganizationPositionId into r_opos_join - //from opos_join in r_opos_join.DefaultIfEmpty() + join p in profiles on pp?.ProfileId equals p?.Id into pGroup + from p in pGroup.DefaultIfEmpty() + join pf in prefixes on p?.PrefixId equals pf?.Id into pfGroup + from pf in pfGroup.DefaultIfEmpty() + join rp in report2s on pn?.Id equals rp?.PositionNumId into rpGroup + from rp in rpGroup.DefaultIfEmpty() + join pnNew in positionNumbers on rp == null ? op?.PositionNumberId : rp?.PositionNumId equals pnNew?.Id into pnNewGroup + from pnNew in pnNewGroup.DefaultIfEmpty() + join ppNew in positionPaths on rp == null ? pm?.PositionPathId : rp?.PositionPathId equals ppNew?.Id into ppNewGroup + from ppNew in ppNewGroup.DefaultIfEmpty() + join plNew in positionLevels on rp == null ? p?.PositionLevelId : rp?.PositionLevelId equals plNew?.Id into plNewGroup + from plNew in plNewGroup.DefaultIfEmpty() - join ppos in _context.ProfilePositions.AsNoTracking().ToList() on r.ProfilePositionId equals ppos.Id into r_ppos_join - from ppos_join in r_ppos_join.DefaultIfEmpty() - //join pf in profile_data.ToList() on ppos_join.ProfileId equals pf.Id into r_pf_join - //from pf_join in r_pf_join.DefaultIfEmpty() - select new - { - Id = r.Id, - ProfilePositionId = ppos_join == null ? Guid.Empty : ppos_join.Id, - CitizenId = ppos_join != null ? GetCitizenId(ppos_join.ProfileId.Value) : "", - Prefix = ppos_join != null ? GetPrefix(ppos_join.ProfileId.Value) : "", - FirstName = ppos_join != null ? GetFirstName(ppos_join.ProfileId.Value) : "", - LastName = ppos_join != null ? GetLastName(ppos_join.ProfileId.Value) : "", - // new - OrganizationName = r.OrganizationOrganization, - ShortName = GetShortNameFromPosNo(r.PositionNum), - PositionNumber = r.PositionNum, - PositionNumberInt = GetPosnoIntFromPosNo(r.PositionNum), - PositionPath = r.PositionPath, - PositionPathSide = r.PositionPathSide, - PositionType = r.PositionType, - PositionLevel = r.PositionLevel, - PositionExecutive = r.PositionExecutive, - PositionExecutiveSide = r.PositionExecutiveSide, + join psNew in positionPathSides on rp == null ? pm?.PositionPathSideId : rp?.PositionPathSideId equals psNew?.Id into psNewGroup + from psNew in psNewGroup.DefaultIfEmpty() + join peNew in positionExecutives on rp == null ? pm?.PositionExecutiveId : rp?.PositionExecutiveId equals peNew?.Id into peNewGroup + from peNew in peNewGroup.DefaultIfEmpty() + join pesNew in positionExecutiveSides on rp == null ? pm?.PositionExecutiveSideId : rp?.PositionExecutiveSideId equals pesNew?.Id into pesNewGroup + from pesNew in pesNewGroup.DefaultIfEmpty() - OrganizationPositionId = r.OrganizationPositionId, + join ptNew in positionTypes on rp == null ? pm?.PositionTypeId : rp?.PositionTypeId equals ptNew?.Id into ptNewGroup + from ptNew in ptNewGroup.DefaultIfEmpty() - // old - OcId = GetOcId(r.OrganizationShortNameId.Value, r.OrganizationOrganizationId.Value), - Degree = ppos_join == null ? "" : (profile_data.Where(x => x.Id == ppos_join.ProfileId).FirstOrDefault().Degree), - Salary = ppos_join == null ? 0 : (profile_data.Where(x => x.Id == ppos_join.ProfileId).FirstOrDefault().Salary), - SalaryPosition = ppos_join == null ? 0 : (profile_data.Where(x => x.Id == ppos_join.ProfileId).FirstOrDefault().SalaryPosition), - - ShortNameOld = GetShortNameFromPosNo(r.PositionNumOld), - PositionNumberOld = r.PositionNumOld, - PositionNumberOldInt = GetPosnoIntFromPosNo(r.PositionNumOld), - GovCode = r.GovernmentCodeOld, - GovCodeNew = r.GovernmentCode, - PositionName = r.PositionPath, - PositionNameOld = r.PositionPathOld, + join orgOrder in orgWithOrder on op.OrganizationId equals orgOrder.Id - PositionPathOld = r.PositionPathOld, - PositionPathSideOld = r.PositionPathSideOld, - PositionTypeOld = r.PositionTypeOld, - PositionLevelOld = r.PositionLevelOld, - PositionExecutiveOld = r.PositionExecutiveOld, - PositionExecutiveSideOld = r.PositionExecutiveSideOld, - }).ToList(); + select new + { + ProfilePositionId = pp == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : pp.Id, + ProfileId = p == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Id, + Prefix = pf == null ? null : pf.Name, + FirstName = p == null ? null : p.FirstName, + LastName = p == null ? null : p.LastName, + PositionNumberOld = rp == null ? (pn == null ? null : pn.Name) : rp.PositionNumOld, + PositionPathOld = rp == null ? (pPath == null ? null : pPath.Name) : rp.PositionPathOld, + PositionLevelOld = rp == null ? (p == null ? null : p.PositionLevel) : rp.PositionLevelOld, + PositionNumberIdNew = pnNew == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : pnNew.Id, + PositionNumberNew = pnNew == null ? null : pnNew.Name, + PositionPathNew = ppNew == null ? null : ppNew.Name, + PositionLevelNew = plNew == null ? null : plNew.Name, + PositionMasterId = pm == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : pm.Id, + Qualification = pm == null ? null : pm.Qualification, + OrganizationShortName = os == null ? null : os.Name, + Change = rp == null ? null : (rp == null ? null : rp.Status), + StatusPosition = p == null ? false : true, + Report2 = rp, + ocId = op.OrganizationId, + ocIdNew = rp == null ? op.OrganizationId : GetOrgIdByOrgPositionId(rp.OrganizationPositionId.Value).Result, + PositionPathSideOld = rp == null ? (ps == null ? null : ps.Name) : rp.PositionPathSideOld, + PositionPathSideNew = psNew == null ? null : psNew.Name, + PositionExecutiveOld = rp == null ? (pe == null ? null : pe.Name) : rp.PositionExecutiveOld, + PositionExecutiveNew = peNew == null ? null : peNew.Name, + PositionExecutiveSideOld = rp == null ? (pes == null ? null : pes.Name) : rp.PositionExecutiveSideOld, + PositionExecutiveSideNew = pesNew == null ? null : pesNew.Name, + Remark = op.PositionUserNote ?? "", + OcOrder = orgOrder.Order, + PositonTypeOld = rp == null ? (pt == null ? null : pt.Name) : rp.PositionTypeOld, + PositionTypeNew = ptNew == null ? null : ptNew.Name, + + }) + .ToList() + .OrderBy(x => x.OcOrder).ThenBy(x => GetPosnoIntFromPosNo(x.PositionNumberOld)) + .ToList(); + + var results = new List(); + + var PositionLevels = await _applicationDbContext.PositionLevels + .ToListAsync(); + + foreach (var r in raw_results.ToList()) + { + var salaryRecord = _applicationDbContext.ProfileSalaries.AsQueryable() + .Include(p => p.Profile) + .OrderByDescending(x => x.Date) + .FirstOrDefault(x => x.Profile.Id == r.ProfileId); + + var lastEducation = _applicationDbContext.ProfileEducations.AsQueryable() + .Include(p => p.Profile) + .OrderByDescending(x => x.FinishDate) + .FirstOrDefault(x => x.Profile.Id == r.ProfileId); + //.FirstOrDefault(x => x.ProfileId == r.ProfileId); + + var allLevel = await _applicationDbContext.AvailablePositionLevels.ToListAsync(); + + var data = new Account2ResultItem + { + Id = r.Report2 == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : r.Report2.Id, + RootOcId = organizationId, + RootOcName = RootOcName, + OcId = r.ocId.Value, + OcFullName = _profileService.FindOCFullPathWithNewLine(r.ocId.Value, false, suppress: RootOcName), + OcName = _profileService.GetOrganizationName(r.ocId.Value), + + ShortName = GetShortNameFromPosNo(r.PositionNumberOld), + PositionNumber = r.PositionNumberOld, + PositionLevel = r.PositionLevelOld, + PositionName = r.PositionPathOld, + PositionSide = r.PositionPathSideOld, + PositionExecutive = r.PositionExecutiveOld, + PositionExecutiveSide = r.PositionExecutiveSideOld, + Remark = r.Remark, + PositionType = r.PositonTypeOld, + + OcIdNew = r.ocIdNew.Value, + OcFullNameNew = _profileService.FindOCFullPathWithNewLine(r.ocIdNew.Value, false, suppress: RootOcName), + OcNameNew = _profileService.GetOrganizationName(r.ocIdNew.Value), + + ShortNameNew = GetShortNameFromPosNo(r.PositionNumberNew), + + PositionNumberNew = r.PositionNumberNew, + PositionLevelNew = r.PositionLevelNew, + PositionNameNew = r.PositionPathNew, + PositionSideNew = r.PositionPathSideNew, + PositionExecutiveNew = r.PositionExecutiveNew, + PositionExecutiveSideNew = r.PositionExecutiveSideNew, + PositionTypeNew = r.PositionTypeNew, + + Prefix = r.Prefix, + FirstName = r.FirstName, + LastName = r.LastName, + Degree = lastEducation == null ? r.Qualification : lastEducation.Degree, + + Salary = salaryRecord == null || salaryRecord.Amount == null ? 0 : (int)salaryRecord.Amount!.Value, + SalaryPosition = salaryRecord == null || salaryRecord.PositionSalaryAmount == null ? 0 : (int)salaryRecord.PositionSalaryAmount!.Value, + OcOrder = r.OcOrder + }; + results.Add(data); + } + // results = results.Sort() + return results; + } + + public async Task> GetReport2QueryOld(Guid ocId) + { + try + { - //var report2_data = (from org_pos in _context.OrganizationPositions.ToList() - // join ppos in _context.ProfilePositions.ToList() on org_pos.Id equals ppos.OrganizationPositionId - // join pf in profile_data.ToList() on ppos.ProfileId equals pf.Id - // join r_raw in _context.Report2s.ToList() on ppos.Id equals r_raw.ProfilePositionId into r_join - // from r in r_join.DefaultIfEmpty() - // select new - // { - // //Report2Id = r.Id, - // ProfilePositionId = ppos.Id, - // CitizenId = pf.CitizenId, - // Prefix = pf.Prefix, - // FirstName = pf.FirstName, - // LastName = pf.LastName, - // OrganizationName = r == null ? "" : r.OrganizationOrganization, - // ShortName = r == null ? pf.OrganizationShortName : GetShortNameFromPosNo(r.PositionNum), - // PositionNumber = r == null ? pf.PosNo : r.PositionNum, - // PositionNumberInt = r == null ? GetPosnoIntFromPosNo(pf.PosNo) : GetPosnoIntFromPosNo(r.PositionNum), - // PositionPath = r == null ? pf.Position : r.PositionPath, - // PositionPathSide = r == null ? pf.PositionPathSide : r.PositionPathSide, - // PositionType = r == null ? pf.PositionType : r.PositionType, - // PositionLevel = r == null ? pf.PositionLevel : r.PositionLevel, - // PositionExecutive = r == null ? pf.PositionExecutive : r.PositionExecutive, - // PositionExecutiveSide = r == null ? pf.PositionExecutiveSide : r.PositionExecutiveSide, - // OcId = org_pos.Id, - // OrganizationPositionId = ppos.OrganizationPositionId, - // Degree = pf.Degree, - // Salary = pf.Salary, - // SalaryPosition = pf.SalaryPosition, + var ocIdList = _profileService.GetAllIdByRoot(ocId); + var RootOcName = _profileService.GetOrganizationNameFullPath(ocId, false, false); - // ShortNameOld = r == null ? pf.OrganizationShortName : GetShortNameFromPosNo(r.PositionNumOld), - // PositionNumberOld = r == null ? pf.PosNo : r.PositionNumOld, - // PositionNumberOldInt = r == null ? GetPosnoIntFromPosNo(pf.PosNo) : GetPosnoIntFromPosNo(r.PositionNumOld), + var organizationPositions = await _context.OrganizationPositions.ToListAsync(); + var positionMasters = await _context.PositionMasters.ToListAsync(); + var organizations = await _context.Organizations.ToListAsync(); + var organizationOrganizations = await _applicationDbContext.OrganizationOrganizations.ToListAsync(); + var organizationShortNames = await _applicationDbContext.OrganizationShortNames.ToListAsync(); + var positionNumbers = await _context.PositionNumbers.ToListAsync(); + var executivePositions = await _applicationDbContext.PositionExecutives.ToListAsync(); + var executivePositionSide = await _applicationDbContext.PositionExecutiveSides.ToListAsync(); + var positionPaths = await _applicationDbContext.PositionPaths.ToListAsync(); + var positionPathSides = await _applicationDbContext.PositionPathSides.ToListAsync(); + var positionTypes = await _applicationDbContext.PositionTypes.ToListAsync(); + var profilePositions = await _context.ProfilePositions.ToListAsync(); + var prefixes = await _context.Prefixes.ToListAsync(); + var profiles = await _context.Profiles.ToListAsync(); + var report2 = await _context.Report2s.ToListAsync(); - // }).ToList(); - - //var report2_data = (from r in _context.Report2s.ToList() - // join ppos in _context.ProfilePositions.ToList() on r.ProfilePositionId equals ppos.Id - // join org_pos in _context.OrganizationPositions.ToList() on ppos.OrganizationPositionId equals org_pos.Id - // join pf in profile_data.ToList() on ppos.ProfileId equals pf.Id - // select new - // { - // Id = r.Id, - // ProfilePositionId = r.ProfilePositionId, - // CitizenId = pf.CitizenId, - // Prefix = pf.Prefix, - // FirstName = pf.FirstName, - // LastName = pf.LastName, - // OrganizationName = r.OrganizationOrganization, - // ShortName = r.OrganizationShortName, - // PositionNumber = r.PositionNum, - // PositionPath = r.PositionPath, - // PositionPathSide = r.PositionPathSide, - // PositionType = r.PositionType, - // PositionLevel = r.PositionLevel, - // PositionExecutive = r.PositionExecutive, - // PositionExecutiveSide = r.PositionExecutiveSide, - // OcId = org_pos.Id, - // OrganizationPositionId = ppos.OrganizationPositionId, - // Degree = pf.Degree, - // Salary = pf.Salary, - // SalaryPosition = pf.SalaryPosition, - // }).ToList(); + var profile_data = (from p in profiles + join pf in prefixes on p.PrefixId equals pf.Id + join ps in profilePositions on p.Id equals ps.ProfileId + select new + { + p.Id, + p.CitizenId, + Prefix = pf.Name, + p.FirstName, + p.LastName, + p.PositionLine, + p.Position, + p.PositionPathSide, + p.PositionType, + p.PositionLevel, + p.PositionExecutive, + p.PositionExecutiveSide, + p.PosNo, + p.OrganizationShortName, + Degree = p.Educations == null || p.Educations.Count == 0 ? "" : $"{p.Educations.OrderBy(x => x.StartDate).Last().Degree}\r\n({p.Educations.OrderBy(x => x.StartDate).Last().Field})", + Salary = p.Salaries == null || p.Salaries.Count == 0 ? 0 : p.Salaries.OrderBy(x => x.Date).Last().Amount, + SalaryPosition = p.Salaries == null || p.Salaries.Count == 0 ? 0 : p.Salaries.OrderBy(x => x.Date).Last().PositionSalaryAmount, + OrganizationPositionId = ps.OrganizationPositionId + }).ToList(); - //var data2 = (from r in report2_raw_data - // where ocIdList.Contains(r.OcId) - // select new Account2ResultItem - // { - // Id = r.Id, - // RootOcId = ocId, - // RootOcName = RootOcName, - // GovernmentCode = r.GovCode, - // OcId = r.OcId, - // OcFullName = _profileService.FindOCFullPathWithNewLine(r.OcId, false, suppress: RootOcName), - // OcName = _profileService.GetOrganizationName(r.OcId), - // ShortName = r.ShortNameOld, - // PositionNumber = r.PositionNumberOld, - // PositionLevel = r.PositionLevelOld, - // PositionName = $"{r.PositionNameOld}\r\n", - // PositionSide = r.PositionPathSideOld, - // PositionExecutive = r.PositionExecutiveOld, - // PositionExecutiveSide = r.PositionExecutiveSideOld, - // Remark = "", - // PositionType = r.PositionTypeOld, - // OcIdNew = r.OcId, - // OcFullNameNew = _profileService.FindOCFullPathWithNewLine(r.OcId, false, suppress: RootOcName), - // OcNameNew = _profileService.GetOrganizationName(r.OcId), - // ShortNameNew = r.ShortName, - // PositionNumberNew = r.PositionNumber, - // PositionLevelNew = r.PositionLevel, - // PositionNameNew = $"{r.PositionName}\r\n", - // PositionSideNew = r.PositionPathSide, - // PositionExecutiveNew = r.PositionExecutive, - // PositionExecutiveSideNew = r.PositionExecutiveSide, - // PositionTypeNew = r.PositionType, + //var report2_raw_data = (from r in _context.Report2s.AsNoTracking().ToList() + // //join opos in _context.ProfilePositions.AsNoTracking().ToList() on r.OrganizationPositionId equals opos.OrganizationPositionId into r_opos_join + // //from opos_join in r_opos_join.DefaultIfEmpty() + + // join ppos in _context.ProfilePositions.AsNoTracking().ToList() on r.ProfilePositionId equals ppos.Id into r_ppos_join + // from ppos_join in r_ppos_join.DefaultIfEmpty() + // //join pf in profile_data.ToList() on ppos_join.ProfileId equals pf.Id into r_pf_join + // //from pf_join in r_pf_join.DefaultIfEmpty() + // select new + // { + // Id = r.Id, + // ProfilePositionId = ppos_join == null ? Guid.Empty : ppos_join.Id, + // CitizenId = ppos_join != null ? GetCitizenId(ppos_join.ProfileId.Value) : "", + // Prefix = ppos_join != null ? GetPrefix(ppos_join.ProfileId.Value) : "", + // FirstName = ppos_join != null ? GetFirstName(ppos_join.ProfileId.Value) : "", + // LastName = ppos_join != null ? GetLastName(ppos_join.ProfileId.Value) : "", + // // new + // OrganizationName = r.OrganizationOrganization, + // ShortName = GetShortNameFromPosNo(r.PositionNum), + // PositionNumber = r.PositionNum, + // PositionNumberInt = GetPosnoIntFromPosNo(r.PositionNum), + // PositionPath = r.PositionPath, + // PositionPathSide = r.PositionPathSide, + // PositionType = r.PositionType, + // PositionLevel = r.PositionLevel, + // PositionExecutive = r.PositionExecutive, + // PositionExecutiveSide = r.PositionExecutiveSide, + + // OrganizationPositionId = r.OrganizationPositionId, + + // // old + // OcId = GetOcId(r.OrganizationShortNameId.Value, r.OrganizationOrganizationId.Value), + // Degree = ppos_join == null ? "" : (profile_data.Where(x => x.Id == ppos_join.ProfileId).FirstOrDefault().Degree), + // Salary = ppos_join == null ? 0 : (profile_data.Where(x => x.Id == ppos_join.ProfileId).FirstOrDefault().Salary), + // SalaryPosition = ppos_join == null ? 0 : (profile_data.Where(x => x.Id == ppos_join.ProfileId).FirstOrDefault().SalaryPosition), + + // ShortNameOld = GetShortNameFromPosNo(r.PositionNumOld), + // PositionNumberOld = r.PositionNumOld, + // PositionNumberOldInt = GetPosnoIntFromPosNo(r.PositionNumOld), + // GovCode = r.GovernmentCodeOld, + // GovCodeNew = r.GovernmentCode, + // PositionName = r.PositionPath, + // PositionNameOld = r.PositionPathOld, - // PositionNumberInt = r.PositionNumberOldInt, - // PositionNumberIntNew = r.PositionNumberInt, + // PositionPathOld = r.PositionPathOld, + // PositionPathSideOld = r.PositionPathSideOld, + // PositionTypeOld = r.PositionTypeOld, + // PositionLevelOld = r.PositionLevelOld, + // PositionExecutiveOld = r.PositionExecutiveOld, + // PositionExecutiveSideOld = r.PositionExecutiveSideOld, + // }).ToList(); - // Prefix = r.Prefix, - // FirstName = r.FirstName, - // LastName = r.LastName, - // Degree = r.Degree, + var report2_data = (from org_pos in _context.OrganizationPositions.ToList() + join ppos in _context.ProfilePositions.ToList() on org_pos.Id equals ppos.OrganizationPositionId + join pf in profile_data.ToList() on ppos.ProfileId equals pf.Id + join r_raw in _context.Report2s.ToList() on ppos.OrganizationPositionId equals r_raw.OrganizationPositionId into r_join + from r in r_join.DefaultIfEmpty() + select new + { + //Report2Id = r.Id, + ProfilePositionId = ppos.Id, + CitizenId = pf.CitizenId, + Prefix = pf.Prefix, + FirstName = pf.FirstName, + LastName = pf.LastName, + OrganizationName = r == null ? "" : r.OrganizationOrganization, + ShortName = r == null ? pf.OrganizationShortName : GetShortNameFromPosNo(r.PositionNum), + PositionNumber = r == null ? pf.PosNo : r.PositionNum, + PositionNumberInt = r == null ? GetPosnoIntFromPosNo(pf.PosNo) : GetPosnoIntFromPosNo(r.PositionNum), + PositionPath = r == null ? pf.Position : r.PositionPath, + PositionPathSide = r == null ? pf.PositionPathSide : r.PositionPathSide, + PositionType = r == null ? pf.PositionType : r.PositionType, + PositionLevel = r == null ? pf.PositionLevel : r.PositionLevel, + PositionExecutive = r == null ? pf.PositionExecutive : r.PositionExecutive, + PositionExecutiveSide = r == null ? pf.PositionExecutiveSide : r.PositionExecutiveSide, + OcId = org_pos.OrganizationId.Value, + OrganizationPositionId = ppos.OrganizationPositionId, + Degree = pf.Degree, + Salary = pf.Salary, + SalaryPosition = pf.SalaryPosition, - // Salary = Convert.ToInt32(r.Salary), - // SalaryPosition = Convert.ToInt32(r.SalaryPosition) + ShortNameOld = r == null ? pf.OrganizationShortName : GetShortNameFromPosNo(r.PositionNumOld), + PositionNumberOld = r == null ? pf.PosNo : r.PositionNumOld, + PositionNumberOldInt = r == null ? GetPosnoIntFromPosNo(pf.PosNo) : GetPosnoIntFromPosNo(r.PositionNumOld), + PositionNameOld = r == null ? pf.PosNo : r.PositionPathOld, + }).ToList(); - // }).ToList(); + //var report2_data = (from r in _context.Report2s.ToList() + // join ppos in _context.ProfilePositions.ToList() on r.OrganizationPositionId equals ppos.OrganizationPositionId + // join org_pos in _context.OrganizationPositions.ToList() on ppos.OrganizationPositionId equals org_pos.Id + // join pf_raw in profile_data.ToList() on r.OrganizationPositionId equals pf_raw.OrganizationPositionId into pf1 + // from pf in pf1.DefaultIfEmpty() - var data = (from op in organizationPositions - join pm in positionMasters on op.PositionMasterId equals pm.Id - join oc in organizations on op.OrganizationId equals oc.Id - join oc_n in organizationOrganizations on oc.OrganizationOrganizationId equals oc_n.Id - join sn in organizationShortNames on oc.OrganizationShortNameId equals sn.Id - join pn in positionNumbers on op.PositionNumberId equals pn.Id - join pp in positionPaths on pm.PositionPathId equals pp.Id - join pps in positionPathSides on pm.PositionPathSideId equals pps.Id into pp_pps_join - from pp_pps in pp_pps_join.DefaultIfEmpty() - join ex_p in executivePositions on pm.PositionExecutiveId equals ex_p.Id into pm_exp_join - from pm_exp in pm_exp_join.DefaultIfEmpty() - join ex_p_s in executivePositionSide on pm.PositionExecutiveSideId equals ex_p_s.Id into pm_exp_s_join - from pm_exp_s in pm_exp_s_join.DefaultIfEmpty() - join pt in positionTypes on pm.PositionTypeId equals pt.Id - join rp2 in report2_raw_data.ToList() on op.Id equals rp2.OrganizationPositionId into rp2_join - from rp2_dt in rp2_join.DefaultIfEmpty() + // select new + // { + // Id = r.Id, + // ProfilePositionId = r.ProfilePositionId, + // CitizenId = pf is null ? GetCitizenId(ppos.ProfileId.Value) : pf.CitizenId, + // Prefix = pf is null ? GetPrefix(ppos.ProfileId.Value) : pf.Prefix, + // FirstName = pf is null ? GetFirstName(ppos.ProfileId.Value) : pf.FirstName, + // LastName = pf is null ? GetLastName(ppos.ProfileId.Value) : pf.LastName, + // OrganizationName = r.OrganizationOrganization, + // ShortName = r.OrganizationShortName, + // PositionNumber = r.PositionNum, + // PositionNumberInt = GetPosnoIntFromPosNo(r.PositionNum), + // PositionPath = r.PositionPath, + // PositionPathSide = r.PositionPathSide, + // PositionType = r.PositionType, + // PositionLevel = r.PositionLevel, + // PositionExecutive = r.PositionExecutive, + // PositionExecutiveSide = r.PositionExecutiveSide, + // OcId = org_pos.OrganizationId.Value, + // OrganizationPositionId = r.OrganizationPositionId, + // Degree = pf.Degree, + // Salary = pf.Salary, + // SalaryPosition = pf.SalaryPosition, - where ocIdList.Contains((Guid)op.OrganizationId) - select new Account2ResultItem - { - Id = op.Id, - RootOcId = ocId, - RootOcName = RootOcName, - OcId = op.OrganizationId.Value, - OcFullName = _profileService.FindOCFullPathWithNewLine(op.OrganizationId.Value, false, suppress: RootOcName), - OcName = _profileService.GetOrganizationName(op.OrganizationId.Value), - ShortName = rp2_dt == null ? sn.Name : rp2_dt.ShortNameOld, - - PositionNumber = rp2_dt == null ? pn.Name : rp2_dt.PositionNumberOld, + // ShortNameOld = GetShortNameFromPosNo(r.PositionNumOld), + // PositionNumberOld = r.PositionNumOld, + // PositionNumberOldInt = GetPosnoIntFromPosNo(r.PositionNumOld), + // PositionNameOld = r.PositionPathOld, + // }).ToList(); + + + //var data2 = (from r in report2_raw_data + // where ocIdList.Contains(r.OcId) + // select new Account2ResultItem + // { + // Id = r.Id, + // RootOcId = ocId, + // RootOcName = RootOcName, + // GovernmentCode = r.GovCode, + // OcId = r.OcId, + // OcFullName = _profileService.FindOCFullPathWithNewLine(r.OcId, false, suppress: RootOcName), + // OcName = _profileService.GetOrganizationName(r.OcId), + // ShortName = r.ShortNameOld, + // PositionNumber = r.PositionNumberOld, + // PositionLevel = r.PositionLevelOld, + // PositionName = $"{r.PositionNameOld}\r\n", + // PositionSide = r.PositionPathSideOld, + // PositionExecutive = r.PositionExecutiveOld, + // PositionExecutiveSide = r.PositionExecutiveSideOld, + // Remark = "", + // PositionType = r.PositionTypeOld, + // OcIdNew = r.OcId, + // OcFullNameNew = _profileService.FindOCFullPathWithNewLine(r.OcId, false, suppress: RootOcName), + // OcNameNew = _profileService.GetOrganizationName(r.OcId), + // ShortNameNew = r.ShortName, + // PositionNumberNew = r.PositionNumber, + // PositionLevelNew = r.PositionLevel, + // PositionNameNew = $"{r.PositionName}\r\n", + // PositionSideNew = r.PositionPathSide, + // PositionExecutiveNew = r.PositionExecutive, + // PositionExecutiveSideNew = r.PositionExecutiveSide, + // PositionTypeNew = r.PositionType, + + + // PositionNumberInt = r.PositionNumberOldInt, + // PositionNumberIntNew = r.PositionNumberInt, + + + // Prefix = r.Prefix, + // FirstName = r.FirstName, + // LastName = r.LastName, + // Degree = r.Degree, + + // Salary = Convert.ToInt32(r.Salary), + // SalaryPosition = Convert.ToInt32(r.SalaryPosition) + + // }).ToList(); + + var data2 = (from op in organizationPositions + join rp2 in report2_data.ToList() on op.Id equals rp2.OrganizationPositionId into rp2_join + from rp2_dt in rp2_join.DefaultIfEmpty() + where ocIdList.Contains((Guid)op.OrganizationId) + select new + { + ShortNameNew = rp2_dt == null ? "" : rp2_dt.ShortName, + PositionNumberNew = rp2_dt == null ? "" : rp2_dt.PositionNumber, + Prefix = rp2_dt == null ? "" : rp2_dt.Prefix, + FirstName = rp2_dt == null ? "" : rp2_dt.FirstName, + LastName = rp2_dt == null ? "" : rp2_dt.LastName, + } + ).ToList(); + + + var data = (from op in organizationPositions + join pm in positionMasters on op.PositionMasterId equals pm.Id + join oc in organizations on op.OrganizationId equals oc.Id + join oc_n in organizationOrganizations on oc.OrganizationOrganizationId equals oc_n.Id + join sn in organizationShortNames on oc.OrganizationShortNameId equals sn.Id + join pn in positionNumbers on op.PositionNumberId equals pn.Id + join pp in positionPaths on pm.PositionPathId equals pp.Id + join pps in positionPathSides on pm.PositionPathSideId equals pps.Id into pp_pps_join + from pp_pps in pp_pps_join.DefaultIfEmpty() + join ex_p in executivePositions on pm.PositionExecutiveId equals ex_p.Id into pm_exp_join + from pm_exp in pm_exp_join.DefaultIfEmpty() + join ex_p_s in executivePositionSide on pm.PositionExecutiveSideId equals ex_p_s.Id into pm_exp_s_join + from pm_exp_s in pm_exp_s_join.DefaultIfEmpty() + join pt in positionTypes on pm.PositionTypeId equals pt.Id + join rp2 in report2_data.ToList() on op.Id equals rp2.OrganizationPositionId into rp2_join + from rp2_dt in rp2_join.DefaultIfEmpty() + + where ocIdList.Contains((Guid)op.OrganizationId) + select new Account2ResultItem + { + Id = op.Id, + RootOcId = ocId, + RootOcName = RootOcName, + OcId = op.OrganizationId.Value, + OcFullName = _profileService.FindOCFullPathWithNewLine(op.OrganizationId.Value, false, suppress: RootOcName), + OcName = _profileService.GetOrganizationName(op.OrganizationId.Value), + ShortName = rp2_dt == null ? sn.Name : rp2_dt.ShortNameOld, + + PositionNumber = rp2_dt == null ? pn.Name : rp2_dt.PositionNumberOld, PositionLevel = rp2_dt == null ? _profileService.GetPositionLevel(pm.Id) : rp2_dt.PositionLevel, - PositionName = rp2_dt == null ? $"{pp.Name}\r\n" : $"{ rp2_dt.PositionNameOld }\r\n", - PositionSide = pm.PositionPathSideObject is null ? "" : Newtonsoft.Json.JsonConvert.DeserializeObject>(pm.PositionPathSideObject).GetNameList(), - PositionExecutive = pm_exp == null ? "" : $"{pm_exp.Name}\r\n", - PositionExecutiveSide = pm.PositionExecutiveSideObject is null ? "" : Newtonsoft.Json.JsonConvert.DeserializeObject>(pm.PositionExecutiveSideObject).GetNameList(), - Remark = op.PositionUserNote, - OcOrder = oc.OrganizationOrder.Value, - PositionType = pt.Name, + PositionName = rp2_dt == null ? $"{pp.Name}\r\n" : $"{rp2_dt.PositionNameOld}\r\n", + PositionSide = pm.PositionPathSideObject is null ? "" : Newtonsoft.Json.JsonConvert.DeserializeObject>(pm.PositionPathSideObject).GetNameList(), + PositionExecutive = pm_exp == null ? "" : $"{pm_exp.Name}\r\n", + PositionExecutiveSide = pm.PositionExecutiveSideObject is null ? "" : Newtonsoft.Json.JsonConvert.DeserializeObject>(pm.PositionExecutiveSideObject).GetNameList(), + Remark = op.PositionUserNote, + OcOrder = oc.OrganizationOrder.Value, + PositionType = pt.Name, - OcIdNew = rp2_dt == null ? op.OrganizationId.Value : rp2_dt.OcId, - OcFullNameNew = _profileService.FindOCFullPathWithNewLine(op.OrganizationId.Value, false, suppress: RootOcName), - OcNameNew = rp2_dt == null ? _profileService.GetOrganizationName(op.OrganizationId.Value) : _profileService.GetOrganizationName(rp2_dt.OcId), - ShortNameNew = rp2_dt == null ? "" : rp2_dt.ShortName, - PositionNumberNew = rp2_dt == null ? "" : rp2_dt.PositionNumber, - PositionLevelNew = rp2_dt == null ? "" : rp2_dt.PositionLevel, - PositionNameNew = rp2_dt == null ? "" : rp2_dt.PositionPath, - PositionSideNew = rp2_dt == null ? "" : rp2_dt.PositionPathSide, - PositionExecutiveNew = rp2_dt == null ? "" : rp2_dt.PositionExecutive, - PositionExecutiveSideNew = rp2_dt == null ? "" : rp2_dt.PositionExecutiveSide, - PositionTypeNew = rp2_dt == null ? "" : rp2_dt.PositionType, + OcIdNew = rp2_dt == null ? op.OrganizationId.Value : rp2_dt.OcId, + OcFullNameNew = _profileService.FindOCFullPathWithNewLine(op.OrganizationId.Value, false, suppress: RootOcName), + OcNameNew = rp2_dt == null ? _profileService.GetOrganizationName(op.OrganizationId.Value) : _profileService.GetOrganizationName(rp2_dt.OcId), - Prefix = rp2_dt == null ? "" : rp2_dt.Prefix, - FirstName = rp2_dt == null ? "" : rp2_dt.FirstName, - LastName = rp2_dt == null ? "" : rp2_dt.LastName, - Degree = rp2_dt == null ? (pm == null ? "" : pm.Qualification) : rp2_dt.Degree, + ShortNameNew = rp2_dt == null ? "" : rp2_dt.ShortName, + PositionNumberNew = rp2_dt == null ? "" : rp2_dt.PositionNumber, + PositionLevelNew = rp2_dt == null ? "" : rp2_dt.PositionLevel, + PositionNameNew = rp2_dt == null ? "" : rp2_dt.PositionPath, + PositionSideNew = rp2_dt == null ? "" : rp2_dt.PositionPathSide, + PositionExecutiveNew = rp2_dt == null ? "" : rp2_dt.PositionExecutive, + PositionExecutiveSideNew = rp2_dt == null ? "" : rp2_dt.PositionExecutiveSide, + PositionTypeNew = rp2_dt == null ? "" : rp2_dt.PositionType, - Salary = rp2_dt == null ? 0 : (int)rp2_dt.Salary.Value, - SalaryPosition = rp2_dt == null ? 0 : (int)rp2_dt.SalaryPosition.Value, + Prefix = rp2_dt == null ? "" : rp2_dt.Prefix, + FirstName = rp2_dt == null ? "" : rp2_dt.FirstName, + LastName = rp2_dt == null ? "" : rp2_dt.LastName, + Degree = rp2_dt == null ? (pm == null ? "" : pm.Qualification!) : rp2_dt.Degree, + Salary = rp2_dt == null || rp2_dt.Salary == null ? 0 : (int)rp2_dt.Salary!.Value, + SalaryPosition = rp2_dt == null || rp2_dt.SalaryPosition == null ? 0 : (int)rp2_dt.SalaryPosition!.Value, - }).ToList(); - return data; - } - catch - { - throw; - } - } + }).ToList(); - #endregion + return data; + } + catch + { + throw; + } + } - #endregion - } + #endregion - public class Account1ResultItem - { - public Guid Id { get; set; } + #endregion + } - public Guid RootOcId { get; set; } + public class Account1ResultItem + { + public Guid Id { get; set; } - public string RootOcName { get; set; } = string.Empty; + public Guid RootOcId { get; set; } - public Guid OcId { get; set; } + public string RootOcName { get; set; } = string.Empty; - public string OcFullName { get; set; } = string.Empty; + public Guid OcId { get; set; } - public string OcName { get; set; } = string.Empty; + public string OcFullName { get; set; } = string.Empty; - public string ShortName { get; set; } = string.Empty; + public string OcName { get; set; } = string.Empty; - public string PositionNumber { get; set; } = string.Empty; + public string ShortName { get; set; } = string.Empty; - public string PositionName { get; set; } = string.Empty; + public string PositionNumber { get; set; } = string.Empty; - public string PositionSide { get; set; } = string.Empty; + public string PositionName { get; set; } = string.Empty; - public string PositionLevel { get; set; } = string.Empty; + public string PositionSide { get; set; } = string.Empty; - public string PositionExecutive { get; set; } = string.Empty; + public string PositionLevel { get; set; } = string.Empty; - public string PositionExecutiveSide { get; set; } = string.Empty; + public string PositionExecutive { get; set; } = string.Empty; - public string Remark { get; set; } = string.Empty; + public string PositionExecutiveSide { get; set; } = string.Empty; - public int OcOrder { get; set; } = 0; + public string Remark { get; set; } = string.Empty; - public int PositionNumberInt { get; set; } = 0; + public int OcOrder { get; set; } = 0; - public string PositionType { get; set; } = string.Empty; + public int PositionNumberInt { get; set; } = 0; - public int IsDirector { get; set; } = 0; + public string PositionType { get; set; } = string.Empty; - public string GovernmentCode { get; set; } = string.Empty; - } + public int IsDirector { get; set; } = 0; - public class Account2ResultItem - { - public Guid Id { get; set; } + public string GovernmentCode { get; set; } = string.Empty; + } - public Guid RootOcId { get; set; } + public class Account2ResultItem + { + public Guid Id { get; set; } - public string RootOcName { get; set; } = string.Empty; + public Guid RootOcId { get; set; } - public Guid OcId { get; set; } + public string RootOcName { get; set; } = string.Empty; - public string OcFullName { get; set; } = string.Empty; + public Guid OcId { get; set; } - public string OcName { get; set; } = string.Empty; + public string OcFullName { get; set; } = string.Empty; - public string ShortName { get; set; } = string.Empty; + public string OcName { get; set; } = string.Empty; - public string PositionNumber { get; set; } = string.Empty; + public string ShortName { get; set; } = string.Empty; - public string PositionName { get; set; } = string.Empty; + public string PositionNumber { get; set; } = string.Empty; - public string PositionSide { get; set; } = string.Empty; + public string PositionName { get; set; } = string.Empty; - public string PositionLevel { get; set; } = string.Empty; + public string PositionSide { get; set; } = string.Empty; - public string PositionExecutive { get; set; } = string.Empty; + public string PositionLevel { get; set; } = string.Empty; - public string PositionExecutiveSide { get; set; } = string.Empty; + public string PositionExecutive { get; set; } = string.Empty; - public string Remark { get; set; } = string.Empty; + public string PositionExecutiveSide { get; set; } = string.Empty; - public int OcOrder { get; set; } = 0; + public string Remark { get; set; } = string.Empty; - public int PositionNumberInt { get; set; } = 0; + public int OcOrder { get; set; } = 0; - public string PositionType { get; set; } = string.Empty; + public int PositionNumberInt { get; set; } = 0; - // new - public Guid RootOcIdNew { get; set; } + public string PositionType { get; set; } = string.Empty; - public string RootOcNameNew { get; set; } = string.Empty; + // new + public Guid RootOcIdNew { get; set; } - public Guid OcIdNew { get; set; } + public string RootOcNameNew { get; set; } = string.Empty; - public string OcFullNameNew { get; set; } = string.Empty; + public Guid OcIdNew { get; set; } - public string OcNameNew { get; set; } = string.Empty; + public string OcFullNameNew { get; set; } = string.Empty; - public string ShortNameNew { get; set; } = string.Empty; + public string OcNameNew { get; set; } = string.Empty; - public string PositionNumberNew { get; set; } = string.Empty; + public string ShortNameNew { get; set; } = string.Empty; - public string PositionNameNew { get; set; } = string.Empty; + public string PositionNumberNew { get; set; } = string.Empty; - public string PositionSideNew { get; set; } = string.Empty; + public string PositionNameNew { get; set; } = string.Empty; - public string PositionLevelNew { get; set; } = string.Empty; + public string PositionSideNew { get; set; } = string.Empty; - public string PositionExecutiveNew { get; set; } = string.Empty; + public string PositionLevelNew { get; set; } = string.Empty; - public string PositionExecutiveSideNew { get; set; } = string.Empty; + public string PositionExecutiveNew { get; set; } = string.Empty; - public int PositionNumberIntNew { get; set; } = 0; + public string PositionExecutiveSideNew { get; set; } = string.Empty; - public string PositionTypeNew { get; set; } = string.Empty; + public int PositionNumberIntNew { get; set; } = 0; - // name - public string Prefix { get; set; } = string.Empty; + public string PositionTypeNew { get; set; } = string.Empty; - public string FirstName { get; set; } = string.Empty; + // name + public string Prefix { get; set; } = string.Empty; - public string LastName { get; set; } = string.Empty; + public string FirstName { get; set; } = string.Empty; - public string Degree { get; set; } = string.Empty; + public string LastName { get; set; } = string.Empty; - public int Salary { get; set; } = 0; + public string Degree { get; set; } = string.Empty; - public int SalaryPosition { get; set; } = 0; + public int Salary { get; set; } = 0; - public string FullName { get; set; } = string.Empty; + public int SalaryPosition { get; set; } = 0; - public string GovernmentCode { get; set; } = string.Empty; + public string FullName { get; set; } = string.Empty; - } + public string GovernmentCode { get; set; } = string.Empty; - public class OrganizationItem - { - public Guid Id { get; set; } + } - public string Name { get; set; } = string.Empty; + public class OrganizationItem + { + public Guid Id { get; set; } - public int Order { get; set; } = 0; - } + public string Name { get; set; } = string.Empty; + + public int Order { get; set; } = 0; + } }