| @@ -52,7 +52,6 @@ open class MailReminderService( | |||
| val username = settingsService.findByName(SettingNames.MAIL_SMTP_USERNAME).orElseThrow().value | |||
| val pw = settingsService.findByName(SettingNames.MAIL_SMTP_USERNAME).orElseThrow().value | |||
| return !username.isNullOrEmpty() && !pw.isNullOrEmpty() | |||
| } catch (e: Error) { | |||
| return false | |||
| } | |||
| @@ -106,13 +105,9 @@ open class MailReminderService( | |||
| open fun sendTimesheetToTeamLead7TH() { | |||
| if (!isSettingsConfigValid()) return | |||
| val today = LocalDate.now() | |||
| val dayOfWeek = today.dayOfWeek | |||
| val holidayList = holidayService.commonHolidayList().map { it.date } | |||
| val companyHolidayList = companyHolidayService.allCompanyHolidays().map { it.date } | |||
| val allHolidaysList: List<LocalDate> = (holidayList + companyHolidayList).toSet().toList() | |||
| //check if today is holiday | |||
| if (allHolidaysList.contains(today) || dayOfWeek == DayOfWeek.SATURDAY || dayOfWeek == DayOfWeek.SUNDAY) return | |||
| // get working days from last month | |||
| val lastMonth = today.minusMonths(1) | |||
| val yearMonth = YearMonth.from(lastMonth) | |||
| @@ -133,25 +128,17 @@ open class MailReminderService( | |||
| hours = it["hours"].toString().toDouble() | |||
| ) | |||
| } | |||
| // val timesheet = timesheetRepository.findByDeletedFalseAndRecordDateBetweenOrderByRecordDate(filteredLastMonthDays.first(),filteredLastMonthDays.last()) | |||
| val staffs = staffRepository.findAllByEmployTypeAndDeletedFalseAndDepartDateIsNull(FULLTIME) | |||
| val teams = teamRepository.findAll().filter { team -> team.deleted == false && ( team.code == "WY" || team.code == "TW" || team.code == "CH" || team.code == "MN" || team.code == "MC" ) } | |||
| // val teams = teamRepository.findAll().filter { team -> team.deleted == false } | |||
| val teams = teamRepository.findAll().filter { team -> team.deleted == false | |||
| // && ( team.code == "WY" || team.code == "TW" || team.code == "CH" || team.code == "MN" || team.code == "MC" ) | |||
| } | |||
| for (team in teams) { | |||
| // if (team.id?.toInt() != 5) continue // remove this when finishes | |||
| val teamLead = team.staff | |||
| val teamMembers: List<Staff> = staffs.filter { it.team != null && it.team.id == team.id } | |||
| if (teamMembers.isEmpty()) continue | |||
| val teamMembersIds: List<Long?> = teamMembers.map { it.id }.sorted() | |||
| // val filteredTimesheet = timesheet.filter { teamMembersIds.contains(it.staff?.id) } | |||
| val teamMembersIds: List<Long> = teamMembers.map { it.id!! }.sorted() | |||
| val filteredTimesheet = timesheet.filter { teamMembersIds.contains(it.staffId) } | |||
| // val timesheetByIdAndRecord = filteredTimesheet.groupBy { it.staff?.id to it.recordDate } | |||
| // .map { (key, _) -> | |||
| // val (staffId, recordDate) = key | |||
| // recordDate to mutableListOf<Long>(staffId ?: 0) | |||
| // } | |||
| println(filteredTimesheet.filter { it.staffId == 4.toLong() }) | |||
| val timesheetByIdAndRecord = filteredTimesheet.groupBy { it.staffId to it.recordDate } | |||
| .mapNotNull { (key, records) -> | |||
| Triple( | |||
| @@ -160,12 +147,6 @@ open class MailReminderService( | |||
| records.sumOf { it.hours } | |||
| ) | |||
| } | |||
| // val goodStaffsList = filteredLastMonthDays.map { day -> | |||
| // timesheetByIdAndRecord.find { | |||
| // it.first == day | |||
| // } ?: Pair(day, mutableListOf()) | |||
| // }.sortedBy { it.first } | |||
| val goodStaffsList = filteredLastMonthDays.map { date -> | |||
| val matchedStaffIds = timesheetByIdAndRecord | |||
| .filter { it.first == date && it.third >= 8 } | |||
| @@ -203,13 +184,11 @@ open class MailReminderService( | |||
| @Scheduled(cron = "0 0 6 15 * ?") // (SS/MM/HH/DD/MM/YY) | |||
| open fun sendTimesheetToTeamLead15TH() { | |||
| if (!isSettingsConfigValid()) return | |||
| val today = LocalDate.now() // should always be 15 | |||
| val firstDay = today.withDayOfMonth(1) | |||
| val holidayList = holidayService.commonHolidayList().map { it.date } | |||
| val companyHolidayList = companyHolidayService.allCompanyHolidays().map { it.date } | |||
| val allHolidaysList: List<LocalDate> = (holidayList + companyHolidayList).toSet().toList() | |||
| //get data | |||
| val args = mutableMapOf( | |||
| "from" to firstDay, | |||
| @@ -223,18 +202,16 @@ open class MailReminderService( | |||
| hours = it["hours"].toString().toDouble() | |||
| ) | |||
| } | |||
| // val timesheet = timesheetRepository.findByDeletedFalseAndRecordDateBetweenOrderByRecordDate(firstDay, today) | |||
| val staffs = staffRepository.findAllByEmployTypeAndDeletedFalseAndDepartDateIsNull(FULLTIME) | |||
| val teams = teamRepository.findAll().filter { team -> team.deleted == false && ( team.code == "WY" || team.code == "TW" || team.code == "CH" || team.code == "MN" || team.code == "MC" )} | |||
| // val teams = teamRepository.findAll().filter { team -> team.deleted == false } | |||
| val teams = teamRepository.findAll().filter { team -> team.deleted == false | |||
| // && ( team.code == "WY" || team.code == "TW" || team.code == "CH" || team.code == "MN" || team.code == "MC" ) | |||
| } | |||
| val dateList = generateSequence(firstDay) { it.plusDays(1) } | |||
| .takeWhile { it <= today } | |||
| .toList() | |||
| val filteredDatesList = dateList.filter { | |||
| it !in allHolidaysList && it.dayOfWeek != DayOfWeek.SATURDAY && it.dayOfWeek != DayOfWeek.SUNDAY | |||
| } | |||
| //loop each team | |||
| for (team in teams) { | |||
| // if (team.id?.toInt() != 5) continue // just for testing with fewer records, remove this when finishes | |||
| @@ -260,7 +237,6 @@ open class MailReminderService( | |||
| // Returning a Pair of the date and the list of matched staff IDs | |||
| Pair(date, matchedStaffIds) | |||
| }.sortedBy { it.first } | |||
| // creating the email content | |||
| val intro = StringBuilder("${teamLead.name}, Staffs Missing Timesheet in the Table Below: ($firstDay-$today) \n") | |||
| val tableData = mutableListOf<TableRow>() | |||
| @@ -288,10 +264,8 @@ open class MailReminderService( | |||
| @Scheduled(cron = "0 0 6 * * ?") // (SS/MM/HH/DD/MM/YY) - Runs at 06:00 AM every day | |||
| open fun sendTimesheetReminder() { | |||
| if (!isSettingsConfigValid()) return | |||
| val today = LocalDate.now() | |||
| val dayOfWeek = today.dayOfWeek | |||
| val holidayList = holidayService.commonHolidayList().map { it.date } | |||
| val companyHolidayList = companyHolidayService.allCompanyHolidays().map { it.date } | |||
| val allHolidaysList: List<LocalDate> = (holidayList + companyHolidayList).toSet().toList() | |||
| @@ -302,9 +276,7 @@ open class MailReminderService( | |||
| var fourDaysBefore: LocalDate = today | |||
| var sevenDaysBefore: LocalDate = today | |||
| var daysBefore: LocalDate = today.minusDays(1) | |||
| val workingDaysList = mutableListOf<LocalDate>() | |||
| while (true) { | |||
| if (!allHolidaysList.contains(daysBefore) && daysBefore.dayOfWeek != DayOfWeek.SATURDAY && daysBefore.dayOfWeek != DayOfWeek.SUNDAY) { | |||
| daysChecking++ | |||
| @@ -335,22 +307,17 @@ open class MailReminderService( | |||
| ) | |||
| } | |||
| // val timesheet = timesheetRepository.findByDeletedFalseAndRecordDateBetweenOrderByRecordDate(sevenDaysBefore, fourDaysBefore) | |||
| val staffs = staffRepository.findAllByEmployTypeAndDeletedFalseAndDepartDateIsNull(FULLTIME).filter { | |||
| staff: Staff? -> | |||
| staff?.team?.code == "WY" || | |||
| staff?.team?.code == "TW" || | |||
| staff?.team?.code == "MN" || | |||
| staff?.team?.code == "MC" || | |||
| staff?.team?.code == "CH" | |||
| } // FT? FT? etc | |||
| val staffs = staffRepository.findAllByEmployTypeAndDeletedFalseAndDepartDateIsNull(FULLTIME) | |||
| // .filter { | |||
| // staff: Staff? -> | |||
| // staff?.team?.code == "WY" || | |||
| // staff?.team?.code == "TW" || | |||
| // staff?.team?.code == "MN" || | |||
| // staff?.team?.code == "MC" || | |||
| // staff?.team?.code == "CH" | |||
| // } // FT? FT? etc | |||
| // val staffs = staffRepository.findAllByEmployTypeAndDeletedFalseAndDepartDateIsNull(FULLTIME) | |||
| val staffIds: List<Long> = staffs.map { it.id as Long } | |||
| // val timesheetByIdAndRecord = timesheet.groupBy { it.staff?.id to it.recordDate } | |||
| // .map { (key, _) -> | |||
| // val (staffId, recordDate) = key | |||
| // "$recordDate" to mutableListOf<Long>(staffId ?: 0) | |||
| // } | |||
| val timesheetByIdAndRecord = timesheet.groupBy { | |||
| it.staffId to it.recordDate | |||
| }.mapNotNull { (key, records) -> | |||
| @@ -444,13 +411,6 @@ open class MailReminderService( | |||
| staffIds.forEach { id -> | |||
| var isNaughty: Boolean = false | |||
| val message = StringBuilder("Enter timesheet for:") | |||
| // val tableHtml = StringBuilder( | |||
| // "<table width='100%' border='1' align='center'>" | |||
| // + "<tr align='center'>" | |||
| // + "<td><b>Product Name <b></td>" | |||
| // + "<td><b>Count<b></td>" | |||
| // + "</tr>" | |||
| // ) | |||
| goodStaffsList.forEach { (key, value) -> | |||
| if (!value.contains(id)) { | |||
| isNaughty = true | |||
| @@ -459,7 +419,6 @@ open class MailReminderService( | |||
| } | |||
| println(message) | |||
| fullLog.append("\n $id, $message") | |||
| println("about to return") | |||
| if (!isNaughty) return@forEach | |||
| println("no return") | |||
| val emailAddress = staffRepository.findById(id).get().email | |||