From 7b0c1a4f2c2f8adc6ae83a5eabc6e651f30e8f16 Mon Sep 17 00:00:00 2001 From: "MSI\\derek" Date: Fri, 27 Sep 2024 15:15:52 +0800 Subject: [PATCH] update cross team report --- .../modules/report/service/ReportService.kt | 36 +++++++++++------- .../report/Cross Team Charge Report.xlsx | Bin 18315 -> 19433 bytes 2 files changed, 22 insertions(+), 14 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 112b689..bf8dc06 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 @@ -3633,23 +3633,29 @@ open class ReportService( sortedTeams.forEach { team -> val currentTeam = team.code val _timesheets = timesheets.filter { ts -> -// for team log -// val thisTeam = teamlog.filter { +// for after team log is implemented +// val thisStaffTeam = teamlog.filter { // it.from.isBefore(ts.recordDate) // && it.to != null // && it.staff.id == ts.staff!!.id // }.maxByOrNull { it.from } - ts.project!!.teamLead!!.team.code == currentTeam // check isChargingTeam - && - ts.project!!.teamLead!!.team.code != ts.staff!!.team.code // check isCrossTeam -// ts.project!!.teamLead!!.team.id != thisTeam!!.team.id // for team log +// val thisProjectTeam = teamlog.filter { +// it.from.isBefore(ts.recordDate) +// && it.to != null +// && it.staff.id == ts.project!!.teamLead!!.team.id +// }.maxByOrNull { it.from } + val staffTeam = ts.staff!!.team.code + val projectTeam = ts.project!!.teamLead!!.team.code + (staffTeam == currentTeam && projectTeam != staffTeam) + || (projectTeam == currentTeam && projectTeam != staffTeam) // check isCrossTeam +// ts.project!!.teamLead!!.team.id != thisStaffTeam!!.team.id // for team log } _timesheets.forEach {ts -> // this team charging others // get the grade and salary data of the record val _grade = gradeLog.find { it.staff.id == ts.staff!!.id } val gradeCode = _grade!!.grade.code - val otMultiplier = 1 + val otMultiplier = 1.15 val thisSE = salaryEffective.filter { it.staff.id == ts.staff!!.id && @@ -3889,9 +3895,9 @@ open class ReportService( grades: List, teamId: String, gradeLog: List, - isTeamLead: Boolean, + salaryEffective: List, ) { - val salaryEffective = salaryEffectiveRepository.findAll() +// val salaryEffective = salaryEffectiveRepository.findAll() var sheet: Sheet = workbook.getSheetAt(2) val accountingStyle = workbook.createDataFormat().getFormat("_(* #,##0.00_);_(* (#,##0.00);_(* \"-\"??_);_(@_)") val rowIndex = 1 // Assuming the location is in (1,2), which is the report date field @@ -3902,10 +3908,10 @@ open class ReportService( sheet.getRow(rowIndex).getCell(columnIndex).apply { setCellValue(convertReportMonth) } - var sortedTeams = teams.sortedBy { it.id }.toMutableList() + var sortedTeams = teams.toMutableList() if (teamId.lowercase() != "all") { // sortedTeams = teams.sortedWith(compareBy { if (it.id == teamId.toLong()) 0 else 1 }).toMutableList() - sortedTeams = mutableListOf(sortedTeams.find { teamId.toLong() == it.id }!!) + sortedTeams = mutableListOf(teams.find { teamId.toLong() == it.id }!!) } //// generate info map ///// val teamsInOutMap: MutableMap> = generateTeamBlock( @@ -4503,18 +4509,20 @@ open class ReportService( } } } - val isTeamLead = false conditionalFormattingNegative(sheet) conditionalFormattingPositive(sheet) + val _teams = teams.sortedBy { it.id } + val salaryEffective = salaryEffectiveRepository.findAll() + // page 3 createThirdSheetTeamChargeReport( month, workbook, timesheets, - teams, + _teams, grades, teamId, gradeLog, - isTeamLead, + salaryEffective ) return workbook } 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 cc17ad61ae1a416f46cf09159f011e75d511762c..75eea41ed65fcd6df8c180c406fad501da4dc130 100644 GIT binary patch delta 6473 zcmZu#1yEc~vt1Smu8X_726qqc?k>UIvv_b@EI=T5g1Zykg9cwLxCG0h0m38StNOqC zU%i>Csh*lseQ))2_jI55WVoX&I6@6&cmxmt34ja$0H^`Z2&=B|-~fQUdO}(tSa-~| zp9{NN|5!rytKOhwWkm%tSqGUh-QlZje=34lmjEPG@Mf%`jxL)tRfclaV18@DX_lIs zX2uv9ki`D=tWquwT&{@APdYsFf!kq-LQ48Vg*O3DJp!ov>{Qjh?J5*S-}sxX)NVoP zU{|P;<*}$iK5?f8^Y#)~s@a}4m=A8nm7mh~j4iAbX@RH+8W2^Vlab!Veg{(;8#PGn zs#;vo`Jl0p#h^bZy|;EOL5CqgkxSMzVUI6UehAN$hzQWNJ&v#(<^s_0M@ygWqHAnB zmN@A%>&sgj5GDILhhWKwHEu3+oIzS?i7*t+5r1po2W7=;z3b#67ZOkfV@2ex<}4RA zX$`x2Q*I^4YYrFsSW-9lAO{yE-DDiL_280YJ(on>okb)}!;rSGU>NUYh@6` zhD|;L0wwcUAn|B-i6IKF-k3@VCg+vGsh#&TbQ~W?+fyOiSdf}^N?S~fY6km43#S4x z0$;TzJZGL^y^Hc2_1$M@Br!=-xmRU`8NZRbkD*Okl*Nrmc(|)^`yhI! z^XcG+$!`KX6Mj&drNv0J@$vj54mML-+i@Nv@vAGW#=*nGoRqe2?o�-wR@9HcdnB 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 delta 5400 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

@egr zaiL0P86gQeA4uA7#ik?i=ZB*B_@CfBeQiUlM$D17;ud-~@_1=fWzLsh){s`_QOVLJ z?4mj(Y&(}Fy)1{G_yIi9)GNGUj*gg|7gvxN5JZplT3c@xP*=)%LBupee86tX{0EW~ zV$HX3M;&DU{AfR8RXIm&TK@qUoEyEW0>=0&73~ok_PRbjojNtIT1a+{LB{pjK{#;m z8eUREQ@wGTJs`j0&X(ByP{O}ZBB?)mAhh|qW}UHSTH*xAPi`@SJwhA6c+gvurl*`g zbv<6ryxi6n8R>|@=`|DZ&EEiXMCraYG)<@d^y*Znt@Ty)+FGliRTQ`Nj;~4%JUf44 z-ttr5>CoBXtlzLR&^7Njm0wtUuh`UzjxTd)BDYmSg0Su2sccb*sMe%S1s4<&P)Mip zAeo<%bt%3B>E65_Vv(=EtTZ4B`bDc4^}T|FB6vsMd;BVkrOKu?s7YlKRIwW0DEc0y zWmLCtW9gnx< zKaNaRc;qeCR?BQCK;(IB@eiCYjD@)ik${ozc6QAq{7SRZ2RQB z#fKal3yLsSj{vm+6|}S#u6=@-Ht;U^sLhSBwd^xHgz0VI^s^UohjR|<9p~rS3~TP> z1e7^X`0E#plfOL4GXBULFH%pLb)NfN<2=jjT&$p&5raq{(`241lnj`vis&BEtGlQuUt>^cV-o zJ)k}9HPNESG(qUu{>d%=)3t)}Zzlp>dW@|u3ox4%6Qs+-_TNzR-zOYzV;Xch+5Xi( zuL%p?zpd92jt}!&R}H8tfbkY(#oX7E2C55Qi#(VLJwc$B5Jp5FjJePg1Nuu}iwbOi yH;e0{b^rnZH2=7$SQ!(ke~0Z~Re${w^*;C{Ubj3XY