Quellcode durchsuchen

1. Add total budget (dashboard - export);

2. Update mail function
tags/Baseline_30082024_BACKEND_UAT
cyril.tsui vor 1 Jahr
Ursprung
Commit
9ce49ea7b1
5 geänderte Dateien mit 84 neuen und 26 gelöschten Zeilen
  1. +11
    -0
      src/main/java/com/ffii/tsms/modules/common/mail/pojo/MailRequest.kt
  2. +66
    -24
      src/main/java/com/ffii/tsms/modules/common/mail/service/MailReminderService.kt
  3. +4
    -2
      src/main/java/com/ffii/tsms/modules/data/service/DashboardService.kt
  4. +2
    -0
      src/main/java/com/ffii/tsms/modules/data/web/models/ExportDashboardExcelRequest.kt
  5. +1
    -0
      src/main/java/com/ffii/tsms/modules/timesheet/entity/TimesheetRepository.kt

+ 11
- 0
src/main/java/com/ffii/tsms/modules/common/mail/pojo/MailRequest.kt Datei anzeigen

@@ -82,6 +82,17 @@ open class MailRequest() {
return this
}

@Suppress("INAPPLICABLE_JVM_NAME")
@JvmName("addToList")
open fun addTo(to: List<String>): Builder {
to.forEach {
if (it.isNotEmpty()) {
mailRequest.addTo(InternetAddress(it))
}
}
return this
}

@Suppress("INAPPLICABLE_JVM_NAME")
@JvmName("addCcInternetAddress")
open fun addCc(cc: InternetAddress): Builder {


+ 66
- 24
src/main/java/com/ffii/tsms/modules/common/mail/service/MailReminderService.kt Datei anzeigen

@@ -2,49 +2,89 @@ package com.ffii.tsms.modules.common.mail.service

import com.ffii.tsms.modules.common.SecurityUtils
import com.ffii.tsms.modules.common.SettingNames
import com.ffii.tsms.modules.common.holiday.service.HolidayService
import com.ffii.tsms.modules.common.mail.pojo.MailRequest
import com.ffii.tsms.modules.data.entity.StaffRepository
import com.ffii.tsms.modules.data.service.StaffsService
import com.ffii.tsms.modules.project.web.models.MilestoneInfo
import com.ffii.tsms.modules.settings.service.SettingsService
import com.ffii.tsms.modules.timesheet.entity.TimesheetRepository
import com.ffii.tsms.modules.timesheet.service.TimesheetsService
import com.ffii.tsms.modules.user.service.UserService
import jakarta.mail.internet.InternetAddress
import org.apache.commons.logging.Log
import org.apache.commons.logging.LogFactory
import org.springframework.stereotype.Service
import java.time.DayOfWeek
import java.time.LocalDate
import java.time.format.DateTimeFormatter
import java.time.temporal.TemporalAdjuster
import java.time.temporal.TemporalAdjusters

@Service
open class MailReminderService (
open class MailReminderService(
val mailService: MailService,
val userService: UserService,
val settingsService: SettingsService,
val holidayService: HolidayService,
val timesheetsService: TimesheetsService,
val timesheetRepository: TimesheetRepository,
val staffsService: StaffsService,
val staffRepository: StaffRepository,
) {
protected val logger: Log = LogFactory.getLog(javaClass)

private val dateFormat: DateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd")

// @Scheduled(cron = "0 0 6 * * ?") // Runs at 06:00 AM every day
// @Scheduled(cron = "0 0 6 * * ?") // Runs at 06:00 AM every day
open fun sendTimesheetReminder() {
val inputDate = LocalDate.now().minusDays(4).format(dateFormat)
val inputDate = LocalDate.now().minusDays(4)
val holidayList = holidayService.commonHolidayList().map { it.date }
val dayOfWeek = inputDate.dayOfWeek

val subject = settingsService.findByName(SettingNames.TIMESHEET_MAIL_SUBJECT).orElseThrow().value
val template = settingsService.findByName(SettingNames.TIMESHEET_MAIL_TEMPLATE).orElseThrow().value
val cc = settingsService.findByName(SettingNames.TIMESHEET_MAIL_CC).orElseThrow().value.split(",")
val bcc = settingsService.findByName(SettingNames.TIMESHEET_MAIL_BCC).orElseThrow().value.split(",")
val mailRequest = MailRequest.Builder()
.subject(subject)
.template("mail/TimesheetNotification")
.args(mapOf(
Pair("date", inputDate),
Pair("template", template)
))
.addTo(InternetAddress("[email protected]"))
.addCc(cc)
.addBcc(bcc)
.build()
if (!holidayList.contains(inputDate) && dayOfWeek != DayOfWeek.SATURDAY && dayOfWeek != DayOfWeek.SUNDAY) {
// Timesheet Data
val timesheet = timesheetRepository.findAllByDeletedFalseAndRecordDate(inputDate)
.groupBy { it.staff?.id }
.mapValues {(_, t) ->
t.map { (it.normalConsumed ?: 0.0) }
}

val mailRequestList = mutableListOf<MailRequest>()
mailRequestList += mailRequest
mailService.send(mailRequestList)
// Staff Data
val staffs = staffRepository.findAllByDeletedFalse().orElseThrow()

val toList = mutableListOf<String>()
staffs.forEach { staff ->
val sum = timesheet[staff.id]?.sum() ?: 0.0

if (sum < 8) {
toList += staff.email
}
}

val subject = settingsService.findByName(SettingNames.TIMESHEET_MAIL_SUBJECT).orElseThrow().value
val template = settingsService.findByName(SettingNames.TIMESHEET_MAIL_TEMPLATE).orElseThrow().value
val cc = settingsService.findByName(SettingNames.TIMESHEET_MAIL_CC).orElseThrow().value.split(",")
val bcc = settingsService.findByName(SettingNames.TIMESHEET_MAIL_BCC).orElseThrow().value.split(",")
val mailRequest = MailRequest.Builder()
.subject(subject)
.template("mail/TimesheetNotification")
.args(
mapOf(
Pair("date", inputDate.format(dateFormat)),
Pair("template", template)
)
)
// .addTo(InternetAddress("[email protected]"))
.addTo(toList)
.addCc(cc)
.addBcc(bcc)
.build()

val mailRequestList = mutableListOf<MailRequest>()
mailRequestList += mailRequest
mailService.send(mailRequestList)
}
}

open fun sendTimesheetReminderTest() {
@@ -59,10 +99,12 @@ open class MailReminderService (
.subject(subject)
// .template("mail/TimesheetNotification")
.templateContent(template)
.args(mapOf(
Pair("date", inputDate),
.args(
mapOf(
Pair("date", inputDate),
// Pair("template", template)
))
)
)
.addTo(InternetAddress(SecurityUtils.getUser().orElseThrow().email))
.addCc(cc)
.addBcc(bcc)


+ 4
- 2
src/main/java/com/ffii/tsms/modules/data/service/DashboardService.kt Datei anzeigen

@@ -2886,7 +2886,8 @@ open class DashboardService(
}

createCell(8).apply {
cellFormula = "H${rowIndex}*80%"
// cellFormula = "H${rowIndex}*80%"
setCellValue(financialSummaryByClient.totalBudget)
cellStyle.apply {
setFont(normalFont)
dataFormat = accountingStyle
@@ -3063,7 +3064,8 @@ open class DashboardService(
}

createCell(9).apply {
cellFormula = "I${rowIndex}*80%"
// cellFormula = "I${rowIndex}*80%"
setCellValue(financialSummaryByProject.totalBudget)
cellStyle.apply {
setFont(normalFont)
dataFormat = accountingStyle


+ 2
- 0
src/main/java/com/ffii/tsms/modules/data/web/models/ExportDashboardExcelRequest.kt Datei anzeigen

@@ -5,6 +5,7 @@ data class FinancialSummaryByClient (
val customerName: String,
val projectNo: Double,
val totalFee: Double,
val totalBudget: Double,
val cumulativeExpenditure: Double,
val totalInvoiced: Double,
val totalReceived: Double,
@@ -20,6 +21,7 @@ data class FinancialSummaryByProject (
val customerName: String,
val subsidiaryName: String?,
val totalFee: Double,
val totalBudget: Double,
val cumulativeExpenditure: Double,
val totalInvoiced: Double,
val totalReceived: Double,


+ 1
- 0
src/main/java/com/ffii/tsms/modules/timesheet/entity/TimesheetRepository.kt Datei anzeigen

@@ -31,4 +31,5 @@ interface TimesheetRepository : AbstractRepository<Timesheet, Long> {
@Query("SELECT MIN(t.recordDate) AS recordDate FROM Timesheet t WHERE t.project.id = ?1")
fun findMinRecordDateByProjectId(projectId: Long): LocalDate?

fun findAllByDeletedFalseAndRecordDate(recordDate: LocalDate): List<Timesheet>
}

Laden…
Abbrechen
Speichern