|
@@ -42,7 +42,7 @@ open class TimesheetsService( |
|
|
// Replace db timesheet entries by deleting and then adding back |
|
|
// Replace db timesheet entries by deleting and then adding back |
|
|
timesheetRepository.deleteAllByStaffAndRecordDate(currentStaff, entryDate) |
|
|
timesheetRepository.deleteAllByStaffAndRecordDate(currentStaff, entryDate) |
|
|
|
|
|
|
|
|
mergeTimeEntriesByProjectAndTask(timeEntries).map { timeEntry -> |
|
|
|
|
|
|
|
|
timeEntries.map { timeEntry -> |
|
|
val task = timeEntry.taskId?.let { taskRepository.findById(it).getOrNull() } |
|
|
val task = timeEntry.taskId?.let { taskRepository.findById(it).getOrNull() } |
|
|
val project = timeEntry.projectId?.let { projectRepository.findById(it).getOrNull() } |
|
|
val project = timeEntry.projectId?.let { projectRepository.findById(it).getOrNull() } |
|
|
val projectTask = |
|
|
val projectTask = |
|
@@ -162,19 +162,6 @@ open class TimesheetsService( |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private fun mergeTimeEntriesByProjectAndTask(entries: List<TimeEntry>): List<TimeEntry> { |
|
|
|
|
|
return entries |
|
|
|
|
|
.groupBy { timeEntry -> Pair(timeEntry.projectId, timeEntry.taskId) } |
|
|
|
|
|
.values.map { timeEntries -> |
|
|
|
|
|
timeEntries.reduce { acc, timeEntry -> |
|
|
|
|
|
acc.copy( |
|
|
|
|
|
inputHours = (acc.inputHours ?: 0.0) + (timeEntry.inputHours ?: 0.0), |
|
|
|
|
|
otHours = (acc.otHours ?: 0.0) + (timeEntry.otHours ?: 0.0) |
|
|
|
|
|
) |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Transactional(rollbackFor = [Exception::class]) |
|
|
@Transactional(rollbackFor = [Exception::class]) |
|
|
open fun importFile(workbook: Workbook?): String { |
|
|
open fun importFile(workbook: Workbook?): String { |
|
|
val logger = LogFactory.getLog(javaClass) |
|
|
val logger = LogFactory.getLog(javaClass) |
|
|