|
@@ -296,7 +296,7 @@ open class ReportService( |
|
|
|
|
|
|
|
|
val cpiCell = row.createCell(12) |
|
|
val cpiCell = row.createCell(12) |
|
|
cpiCell.apply { |
|
|
cpiCell.apply { |
|
|
cellFormula = "K${rowNum}/I${rowNum}" |
|
|
|
|
|
|
|
|
cellFormula = "IF(K${rowNum} = 0, 0, K${rowNum}/I${rowNum})" |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
val receivedAmountCell = row.createCell(13) |
|
|
val receivedAmountCell = row.createCell(13) |
|
@@ -1092,31 +1092,31 @@ open class ReportService( |
|
|
|
|
|
|
|
|
open fun getFinancialStatus(teamLeadId: Long?): List<Map<String, Any>> { |
|
|
open fun getFinancialStatus(teamLeadId: Long?): List<Map<String, Any>> { |
|
|
val sql = StringBuilder( |
|
|
val sql = StringBuilder( |
|
|
" with cte_invoice as (select p.code, sum(i.issueAmount) as sumIssuedAmount , sum(i.paidAmount) as sumPaidAmount" |
|
|
|
|
|
|
|
|
" with cte_timesheet as (" |
|
|
|
|
|
+ " Select p.code, s.name as staff, IFNULL(t.normalConsumed, 0) as normalConsumed, IFNULL(t.otConsumed , 0) as otConsumed, s2.hourlyRate" |
|
|
|
|
|
+ " from timesheet t" |
|
|
|
|
|
+ " left join project_task pt on pt.id = t.projectTaskId" |
|
|
|
|
|
+ " left join project p ON p.id = pt.project_id" |
|
|
|
|
|
+ " left join staff s on s.id = t.staffId" |
|
|
|
|
|
+ " left join salary s2 on s.salaryId = s2.salaryPoint" |
|
|
|
|
|
+ " left join team t2 on t2.id = s.teamId" |
|
|
|
|
|
+ " )," |
|
|
|
|
|
+ " cte_invoice as (" |
|
|
|
|
|
+ " select p.code, sum(i.issueAmount) as sumIssuedAmount , sum(i.paidAmount) as sumPaidAmount" |
|
|
+ " from invoice i" |
|
|
+ " from invoice i" |
|
|
+ " left join project p on p.code = i.projectCode" |
|
|
+ " left join project p on p.code = i.projectCode" |
|
|
+ " group by p.code" |
|
|
+ " group by p.code" |
|
|
+ " )," |
|
|
|
|
|
+ " cte_teamLead as (" |
|
|
|
|
|
+ " select p.teamLead, p.code, t.name as teamName , t.code as teamCode" |
|
|
|
|
|
+ " from project p" |
|
|
|
|
|
+ " left join team t on t.teamLead = p.teamLead " |
|
|
|
|
|
+ " )" |
|
|
+ " )" |
|
|
+ " Select p.code, p.description, c.name as client, concat(cte_t.teamCode, \' - \', cte_t.teamName) as teamLead, p.planStart , p.planEnd , p.expectedTotalFee ," |
|
|
|
|
|
+ " s.name as staff , IFNULL(t.normalConsumed, 0) as normalConsumed, IFNULL(t.otConsumed , 0) as otConsumed, s2.hourlyRate," |
|
|
|
|
|
+ " IFNULL(cte_i.sumIssuedAmount, 0) as sumIssuedAmount , IFNULL(cte_i.sumPaidAmount, 0) as sumPaidAmount " |
|
|
|
|
|
+ " from timesheet t" |
|
|
|
|
|
+ " left join project_task pt on pt.id = t.projectTaskId" |
|
|
|
|
|
+ " left join project p ON p.id = pt.project_id" |
|
|
|
|
|
+ " left join staff s on s.id = t.staffId" |
|
|
|
|
|
+ " left join salary s2 on s.salaryId = s2.salaryPoint" |
|
|
|
|
|
|
|
|
+ " select p.code, p.description, c.name as client, concat(t.code, \' - \', t.name) as teamLead, p.planStart , p.planEnd , p.expectedTotalFee," |
|
|
|
|
|
+ " IFNULL(cte_ts.normalConsumed, 0) as normalConsumed, IFNULL(cte_ts.otConsumed, 0) as otConsumed," |
|
|
|
|
|
+ " IFNULL(cte_ts.hourlyRate, 0) as hourlyRate, IFNULL(cte_i.sumIssuedAmount, 0) as sumIssuedAmount, IFNULL(cte_i.sumPaidAmount, 0) as sumPaidAmount" |
|
|
|
|
|
+ " from project p" |
|
|
|
|
|
+ " left join cte_timesheet cte_ts on p.code = cte_ts.code" |
|
|
+ " left join customer c on c.id = p.customerId" |
|
|
+ " left join customer c on c.id = p.customerId" |
|
|
+ " left join team t2 on t2.id = s.teamId" |
|
|
|
|
|
|
|
|
+ " left join tsmsdb.team t on t.teamLead = p.teamLead" |
|
|
+ " left join cte_invoice cte_i on cte_i.code = p.code" |
|
|
+ " left join cte_invoice cte_i on cte_i.code = p.code" |
|
|
+ " left join cte_teamLead cte_t on cte_t.code = p.code" |
|
|
|
|
|
+ " where p.status = \'On-going\' " |
|
|
|
|
|
|
|
|
+ " where p.status = \'On-going\'" |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
if (teamLeadId!! > 0) { |
|
|
if (teamLeadId!! > 0) { |
|
|
sql.append(" and p.teamLead = :teamLeadId ") |
|
|
sql.append(" and p.teamLead = :teamLeadId ") |
|
|
} |
|
|
} |
|
|