From 3cda2a8d6e9fadeb4dd2e0173be8a92eb91c8bd6 Mon Sep 17 00:00:00 2001 From: Wayne Date: Thu, 25 Jul 2024 22:03:10 +0900 Subject: [PATCH] Add non billable tasks for timesheets --- .../tsms/modules/timesheet/entity/Timesheet.kt | 5 +++++ .../modules/timesheet/service/TimesheetsService.kt | 14 ++++++-------- .../01_update_timesheet_non_billable_task.sql | 6 ++++++ 3 files changed, 17 insertions(+), 8 deletions(-) create mode 100644 src/main/resources/db/changelog/changes/20240725_01_wayne/01_update_timesheet_non_billable_task.sql diff --git a/src/main/java/com/ffii/tsms/modules/timesheet/entity/Timesheet.kt b/src/main/java/com/ffii/tsms/modules/timesheet/entity/Timesheet.kt index 1566126..e83e980 100644 --- a/src/main/java/com/ffii/tsms/modules/timesheet/entity/Timesheet.kt +++ b/src/main/java/com/ffii/tsms/modules/timesheet/entity/Timesheet.kt @@ -4,6 +4,7 @@ import com.ffii.core.entity.BaseEntity import com.ffii.tsms.modules.data.entity.Staff import com.ffii.tsms.modules.project.entity.Project import com.ffii.tsms.modules.project.entity.ProjectTask +import com.ffii.tsms.modules.project.entity.Task import jakarta.persistence.* import jakarta.validation.constraints.NotNull import java.time.LocalDate @@ -30,6 +31,10 @@ open class Timesheet : BaseEntity() { @JoinColumn(name = "projectTaskId") open var projectTask: ProjectTask? = null + @ManyToOne + @JoinColumn(name = "nonBillableTaskId") + open var nonBillableTask: Task? = null + @ManyToOne @JoinColumn(name = "projectId") open var project: Project? = null diff --git a/src/main/java/com/ffii/tsms/modules/timesheet/service/TimesheetsService.kt b/src/main/java/com/ffii/tsms/modules/timesheet/service/TimesheetsService.kt index 0445689..96f7320 100644 --- a/src/main/java/com/ffii/tsms/modules/timesheet/service/TimesheetsService.kt +++ b/src/main/java/com/ffii/tsms/modules/timesheet/service/TimesheetsService.kt @@ -1,15 +1,10 @@ package com.ffii.tsms.modules.timesheet.service import com.ffii.core.exception.BadRequestException -import com.ffii.core.utils.ExcelUtils -import com.ffii.tsms.modules.data.entity.BuildingType -import com.ffii.tsms.modules.data.entity.Staff import com.ffii.tsms.modules.data.entity.StaffRepository -import com.ffii.tsms.modules.data.entity.WorkNature import com.ffii.tsms.modules.data.service.StaffsService import com.ffii.tsms.modules.data.service.TeamService import com.ffii.tsms.modules.project.entity.* -import com.ffii.tsms.modules.project.web.models.* import com.ffii.tsms.modules.timesheet.entity.Leave import com.ffii.tsms.modules.timesheet.entity.LeaveRepository import com.ffii.tsms.modules.timesheet.entity.Timesheet @@ -58,6 +53,7 @@ open class TimesheetsService( this.projectTask = projectTask this.project = project this.remark = timeEntry.remark + this.nonBillableTask = if (project == null) task else null } } } @@ -96,6 +92,7 @@ open class TimesheetsService( this.remark = entry.remark this.recordDate = this.recordDate ?: recordDate this.staff = this.staff ?: memberStaff + this.nonBillableTask = if (project == null) task else null } timesheetRepository.save(timesheet) @@ -151,11 +148,12 @@ open class TimesheetsService( .groupBy { timesheet -> timesheet.recordDate!!.format(DateTimeFormatter.ISO_LOCAL_DATE) } .mapValues { (_, timesheets) -> timesheets.map { timesheet -> + val projectTask = timesheet.projectTask TimeEntry( id = timesheet.id!!, - projectId = timesheet.projectTask?.project?.id ?: timesheet.project?.id, - taskId = timesheet.projectTask?.task?.id, - taskGroupId = timesheet.projectTask?.task?.taskGroup?.id, + projectId = projectTask?.project?.id ?: timesheet.project?.id, + taskId = (projectTask?.task ?: timesheet.nonBillableTask)?.id, + taskGroupId = (projectTask?.task ?: timesheet.nonBillableTask)?.taskGroup?.id, inputHours = timesheet.normalConsumed ?: 0.0, otHours = timesheet.otConsumed ?: 0.0, remark = timesheet.remark diff --git a/src/main/resources/db/changelog/changes/20240725_01_wayne/01_update_timesheet_non_billable_task.sql b/src/main/resources/db/changelog/changes/20240725_01_wayne/01_update_timesheet_non_billable_task.sql new file mode 100644 index 0000000..c1d3081 --- /dev/null +++ b/src/main/resources/db/changelog/changes/20240725_01_wayne/01_update_timesheet_non_billable_task.sql @@ -0,0 +1,6 @@ +-- liquibase formatted sql +-- changeset wayne:update_timesheet_non_billable_task + +ALTER TABLE timesheet ADD nonBillableTaskId INT NULL; + +ALTER TABLE timesheet ADD CONSTRAINT FK_TIMESHEET_ON_NONBILLABLETASKID FOREIGN KEY (nonBillableTaskId) REFERENCES task (id);