From b0e0f5645375cacf7705b61b3dde1b1243a07f94 Mon Sep 17 00:00:00 2001 From: "cyril.tsui" Date: Fri, 12 Jul 2024 16:58:14 +0800 Subject: [PATCH] update cross team report --- .../modules/report/service/ReportService.kt | 42 ++++++++++++++++-- .../report/Cross Team Charge Report.xlsx | Bin 18521 -> 18555 bytes 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/ffii/tsms/modules/report/service/ReportService.kt b/src/main/java/com/ffii/tsms/modules/report/service/ReportService.kt index f37d223..fdb23b2 100644 --- a/src/main/java/com/ffii/tsms/modules/report/service/ReportService.kt +++ b/src/main/java/com/ffii/tsms/modules/report/service/ReportService.kt @@ -2975,10 +2975,11 @@ open class ReportService( } // if (timesheets.isNotEmpty()) { - val combinedTeamCodeColNumber = grades.size + val combinedTeamCodeColNumber = grades.size * 2 val sortedGrades = grades.sortedBy { it.id } val sortedTeams = teams.sortedBy { it.id } + logger.info(timesheets.filter { it.project?.teamLead?.team?.id != it.staff?.team?.id }.size) val groupedTimesheets = timesheets .filter { it.project?.teamLead?.team?.id != it.staff?.team?.id } .groupBy { timesheetEntry -> @@ -3060,6 +3061,16 @@ open class ReportService( alignment = HorizontalAlignment.CENTER } } + + createCell(columnIndex++).apply { + val cellValue = grade.name.trim().substring(0,1) + grade.name.trim().substring(grade.name.length - 1) + " - Cost Adjusted by Salary Point" + setCellValue(cellValue) + val cloneStyle = workbook.createCellStyle() + cloneStyle.cloneStyleFrom(boldFontWithBorderStyle) + cellStyle = cloneStyle.apply { + alignment = HorizontalAlignment.CENTER + } + } } createCell(columnIndex++).apply { @@ -3106,8 +3117,26 @@ open class ReportService( grade.id )]?.sumOf { it.getValue("salary") } ?: 0.0 - cellStyle = normalFontWithBorderStyle - cellStyle.dataFormat = accountingStyle + val cloneStyle = workbook.createCellStyle() + cloneStyle.cloneStyleFrom(normalFontWithBorderStyle) + cellStyle = cloneStyle.apply { + dataFormat = accountingStyle + } + } + + createCell(columnIndex++).apply { + setCellValue( + groupedTimesheets[Triple( + team.id, + chargedTeam.id, + grade.id + )]?.sumOf { it.getValue("manHour") * it.getValue("salary") } ?: 0.0) + + val cloneStyle = workbook.createCellStyle() + cloneStyle.cloneStyleFrom(normalFontWithBorderStyle) + cellStyle = cloneStyle.apply { + dataFormat = accountingStyle + } } } @@ -3149,6 +3178,13 @@ open class ReportService( cellStyle = normalFontWithBorderStyle cellStyle.dataFormat = accountingStyle } + + createCell(columnIndex++).apply { + val currentCellLetter = CellReference.convertNumToColString(this.columnIndex) + cellFormula = "sum(${currentCellLetter}${startRow}:${currentCellLetter}${endRow})" + cellStyle = normalFontWithBorderStyle + cellStyle.dataFormat = accountingStyle + } } createCell(columnIndex++).apply { diff --git a/src/main/resources/templates/report/Cross Team Charge Report.xlsx b/src/main/resources/templates/report/Cross Team Charge Report.xlsx index e3c005a23f087aa5389b235725ec40af2280a760..1a4889b5f76dbfa6621382f37ca1a82bcb1d7c7b 100644 GIT binary patch delta 2147 zcmV-p2%PuXkOBLU0kG@_e`3=@)0zVS02v7Y01p5F0C;RKcW-iQVsCG2E_iKhtW{la zqc{|OUupk?#na9M1rs0%YB~ym>{Mz-QIc(Uq)3$mPO%D@u}za`H2;0C$!D9hKO+DrWzWczsshWBNk$7IuXsgESXpvW5Cuc=WXVcUlFE!yRpgdq+rCv0 zRvKG`KwN^smrIt=h$nSHOSJ_NG$#t^%ZycWk5(j?z!gM1*Oi&@q5_Bo%bD6Vpav?E z;P$EHf-G_{dyPG`e-`lb;g4--oc&F(baqw262T>3sw;rDwxrMO$F_y>D;KQKeQ+6) zYYF(MkZ$dncNA;N}=N*Grbu`>k{lsjAPU(2>dw zloP4qlqs6_j5ZAUiXJDxDp6Nq&2m_E+HJ=-teb_xGX_?NY zNai|w<^aHJkx)5Tw5T8x;7!nq3pGDcC^=7u|DjQmXct-FmM!(|`&$=*1tQq%aI6G^ z_uJ?WVlgEze-Ignf4WQDTW~#YJ(h_G@Z&e9)9LuWZJUncyQYgnY<6O&WqP*P3FEHg zMp64a7$f{3;iOjCF6bJ%XSfjIv!xMP?^m!L)GR&H_-5}OQ}=J0{n~eJur6=+jIQKS z9(st@53Ef2s%Mx^r|W=Oo5Mu61;bUd{J>I`fx^1Be|wnwMA=gYoUzx|=O7U@x1RBe zQ?%tYgvZp)D^Au4siu?yxu!>DBmZ!N{uU&q=&vb^5s@gVg#ZD6fI6;AuXa7uE)nQ^ z#chhUrEd_XBqw5n#+;Sv*ckHV;b`TqW7(*H7x|J`3<{m`M?fa|uAskN8M&3}^-K^2p_L=LmV3OoW16)Tin zxdQ+I`3V337yy$VMH+vsl+kY6AQXo0C+!_9?qeIC6Cq?kWwBf2Q5DsG$u$rop*Q)|OJAxL077jFw6?aHM3JFuCW#4E!)kx{QYkHog;%|bOrseo z{Uj-(B#!e)5?-S{VWN*=sH)aFXcfO*5cMHh@@i z!R@PuqCnEg{i;@)ECuAf!x^E$PQx#OC+(K;{U276oN8rMWkVoGd(9uyA4lVe(4O=$ z|D!NCi!^)T?f`!esN^(Bc-XU&11voemiI8XU3#+NWr5z(;V6x-^LUWsD?G^N+0Ed~ z=oSxdGo0OKahhdA{2R@tzD^c;Hf_j?Juv&!EObzD`=}Ps0kw*v*)-}$l^hDfZ9Fyr5=Ox{=%-AfZz##d_#s)k|i*i;Ef2mS-eoo%67$Pi@2pnz_S zRkB^l?_hrqfdlsth%ICkCV1q8bO01AnXz;3l>Czg=j~Y#TUMH$49i*=#IuD#GF}+O z^M&Ot4C2|s;B34wi02D~JKMt`o-J(LvLK!>41=lmmFnEJFV)kl4EJ>pjsGC7a{xYA zAW8q?qoZwrJ0G}4D=&iVqhr1Q={v zOtYmvC;@*@gD@C|?#t@<8!QNVQMVYrgT9$TOBH!HP;jidryemEGPXyr#U;@T{vE zw3T2yM^c9JIzjx6~YaTr>X3_JAWo=C}mQ1hWixK))V| z=!_J6MAk=>Xh0o*opq;d!G~~cpNt%fP16L;tk-b*WU|2+!%zLH?4w&DM|k24xWm zW1q}@66fKPh6@^zkM8oT^PS$XQJxk4B}R8XS@>a;lNpT;V;bL2h!;TCdtZNv>>HDz z3KX*@L01C_V$(v?ngaj;8Iy)YP64Hp)kG~D6)TinxdQ+I`3V337ytkO0000000000 z008fk9YsX}-jicRMFEkMsYO5mRg>yPIsv1TB}PF404bCFDI1f6Ml=EfDwF&vC6nGp zDgp&7lQ1+SlP*Uu0yZ?0Ff=KXh({^`XOpu>BO4fOTTD&?003VC000pH0000000000 Z00000wUhBjJ^?zDFi0Z?6+{34001PI?*{+? delta 2117 zcmV-L2)g(CkOA3{0kG@_f5)WEa-0JI02m1X01p5F0C;RKcW-iQVsCG2E_iKhtW{la z;y4t2Uupk?m8ac@G~XeKN=Jl{ol0edfNggrq{<|wSWV)r?G(^x{`+1B0<;~C*v>{^ z$6v?i-h1xN^`~uFpcldgWmR9Zu1pP)Dq}gVp8DFK^HdKsBqXkKe_XJN^tBxk+NYae zf4SZ;{=8)D838~g`r2B`Ix-BAtx1W+6{|@FD=WrJEMdr>3{i7}bFn5wmW5%Prf-y( zR@xpR;+J5s)rw{$VOdj>O71~8DX;|kVoht&p_SPsa3$u?O|56FtN~(43o3UlsD{cc zx_zn`$IAlD-dY~oe{%Tw@V888?CvI5dUsVxGtLBC$t!?1_N3q0Z<&T=y>h|!y$>!! zat%&isEXl{756{L%0FWHCos$WX*3I@)oLXI=Y0^(J94wNo9h)V$o*cr2-o!&T&hSF z8Y-}mqnt{T_q84j*@m1Zz$)I{$Q+Yj{S)LXxtEOn^5|YR2W_OriLFI{XKX;!L^70JrR^@893L2rS@Hr^AWl z2;Og#JBY;$f4@LvApZFwac{x(mh)I;JhC3Y_5v^I^~^+1UC-BDXB6vU8oRm``k`-I zo-+)bZ(t1fqm1E3t`9+1(0$E?2)|nz<88NMnNdUY6OFIt;n7w9rs>wcDT7scyQgF$ zPV!Jgw0)pe&Nh8bw>=L+hj!hB>jz-vrd@uZxm<(7f1J=g&V45IX$_o%Fo0u_2Z~x> zdqpYPQ%d2{Rr89HamJ~wq`D$)N@THCyey04XDxyD@1Iph(1 z4~f|fAzt_78vbm zf@K2UuktvWCd%)JJkvkgI0Neoa^dFm{=$vJFXQ?6!o7E+ z`Qt-+>E^*WP6n6nA55o%zvrXBx+{$DI&>d!)wVJ?LSz4Cy5g$1w^R2wy1rXsTS z=&JqqT^jsVW{ zMz^BGFT&#U>DMolwKh+7DTG5nXl;p?&UNEBwtOiRvytvZ3x7{)Z4`6x*DPY&8NsSB zNi}hrBt@*4Z1I*bHpeh@T}v*mG+!yvx-Gz4`l->sx1H`?mjML>?Xn%}oSibpZyd(!*< zkHQcd8}Tgt27ew<>1mQkzGtNeSau?;*u%VCX1tPBiC?pPm?f7*GAPIe8PFNM8hjgG zlfgA5^qM9ar8)VFr<0JAJ2RbhY$5K2d+hEEs-=6-cW?u;isR`d-jAvz1j3tujHpX| zLB=wZz&v;-(h9A+zay)dy#K7%)+UFekxJ3RpTyo^GjB4S>jPdl2LY+ zs*j|$J`x`Afk7b)ovEo7B#LS1hm=~4hI{Rhci6K!ovPz&qmX@$WY8@q+%Ya6Cf zl62O8zo@OVZ0wl4Z=O8)NU}bch4%&8$V#Os3<&Z-@k&T_NYQJ)^;gIcu2 zBSIFq1j_`o40k}k9*O9J6nsS1CzFam9e-VPr)Ci#`n!L?6kNFm55eZ|TEPN8@;fjV!8j+9g@|*LW-mp<#6#gYfbDu1IGS5j&V-7;e zd_ueevflglOJv^wlVLp+vq(W#0}02Z%yOIq000=1s6FlMF^W0)Z!! zzb6)xUPdYc-YAnEDjSofMl=H8DU%*5C6Y%f0^=%^AuB19RYxiT6qA5QQ~^bk)kh;6 vcP5}S_UjhIC5dZ)H0000000000005Jd6G%P*7?V;+BL?$B00000_BZS4