diff --git a/backend/src/main/java/core/api/controller/ScheduleController.java b/backend/src/main/java/core/api/controller/ScheduleController.java index 0828926..4fffe8a 100644 --- a/backend/src/main/java/core/api/controller/ScheduleController.java +++ b/backend/src/main/java/core/api/controller/ScheduleController.java @@ -275,4 +275,20 @@ public class ScheduleController { return ResponseEntity.ok(permissionResult.getResult().toScheduleInfo()); } + + @PostMapping("/schedules/{scheduleID}/stopManual") + public ResponseEntity stopManual(@PathVariable long scheduleID, @Valid @RequestBody ManualScheduleStopInfo manualScheduleStopInfo) { + PermissionResult permissionResult = taskScheduleService.getSchedulePermissions(scheduleID, SecurityContextHolder.getContext().getAuthentication().getName()); + if(!permissionResult.isHasPermissions()) { + return ResponseEntity.status(403).body(new SimpleStatusResponse("failed")); + } + + if(permissionResult.getExitCode() == ServiceExitCode.MISSING_ENTITY) { + return ResponseEntity.status(404).body(new SimpleStatusResponse("failed")); + } + + taskScheduleService.finishScheduleManual(permissionResult.getResult(), manualScheduleStopInfo); + + return ResponseEntity.ok(new SimpleStatusResponse("success")); + } } diff --git a/backend/src/main/java/core/api/models/timemanager/taskSchedule/ManualScheduleStopInfo.java b/backend/src/main/java/core/api/models/timemanager/taskSchedule/ManualScheduleStopInfo.java new file mode 100644 index 0000000..6bb118a --- /dev/null +++ b/backend/src/main/java/core/api/models/timemanager/taskSchedule/ManualScheduleStopInfo.java @@ -0,0 +1,16 @@ +package core.api.models.timemanager.taskSchedule; + +import com.fasterxml.jackson.annotation.JsonFormat; + +import javax.validation.constraints.NotNull; +import java.time.LocalDateTime; + +public class ManualScheduleStopInfo { + @NotNull + @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX") + private LocalDateTime endTime; + + public LocalDateTime getEndTime() { + return endTime; + } +} diff --git a/backend/src/main/java/core/services/TaskScheduleService.java b/backend/src/main/java/core/services/TaskScheduleService.java index adcaf7f..7b31760 100644 --- a/backend/src/main/java/core/services/TaskScheduleService.java +++ b/backend/src/main/java/core/services/TaskScheduleService.java @@ -1,6 +1,7 @@ package core.services; import core.api.models.timemanager.history.PastScheduleInfo; +import core.api.models.timemanager.taskSchedule.ManualScheduleStopInfo; import core.api.models.timemanager.taskSchedule.scheduleInfos.AdvancedScheduleFieldInfo; import core.api.models.timemanager.taskSchedule.scheduleInfos.AdvancedScheduleInfo; import core.api.models.timemanager.taskSchedule.scheduleInfos.BasicScheduleFieldInfo; @@ -237,4 +238,9 @@ public class TaskScheduleService { } return filteredSchedules; } + + public void finishScheduleManual(AbstractSchedule schedule, ManualScheduleStopInfo manualScheduleStopInfo) { + schedule.setStopTime(manualScheduleStopInfo.getEndTime()); + scheduleRepository.save(schedule); + } } diff --git a/frontend/src/app/dashboard/active-schedule/active-schedule.component.ts b/frontend/src/app/dashboard/active-schedule/active-schedule.component.ts index 58cdfbe..1ab93e4 100644 --- a/frontend/src/app/dashboard/active-schedule/active-schedule.component.ts +++ b/frontend/src/app/dashboard/active-schedule/active-schedule.component.ts @@ -90,6 +90,11 @@ export class ActiveScheduleComponent implements OnInit{ } abortSchedule() { + this.scheduleService.schedulesScheduleIDDelete(this.activeSchedule!.scheduleID).subscribe({ + next: resp => { + this.activeSchedule = undefined; + } + }) }