diff --git a/backend/.idea/workspace.xml b/backend/.idea/workspace.xml
index de13d0f..cf3cb53 100644
--- a/backend/.idea/workspace.xml
+++ b/backend/.idea/workspace.xml
@@ -4,10 +4,13 @@
-
+
-
+
+
+
+
@@ -567,14 +570,21 @@
1699805283751
-
+
+
+ 1699806194258
+
+
+
+ 1699806194258
+
+
-
@@ -599,7 +609,8 @@
-
+
+
diff --git a/backend/src/main/java/core/api/models/timemanager/taskSchedule/scheduleInfos/AdvancedScheduleFieldInfo.java b/backend/src/main/java/core/api/models/timemanager/taskSchedule/scheduleInfos/AdvancedScheduleFieldInfo.java
index c01dee2..ddb62ff 100644
--- a/backend/src/main/java/core/api/models/timemanager/taskSchedule/scheduleInfos/AdvancedScheduleFieldInfo.java
+++ b/backend/src/main/java/core/api/models/timemanager/taskSchedule/scheduleInfos/AdvancedScheduleFieldInfo.java
@@ -6,40 +6,39 @@ import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
-import java.time.ZonedDateTime;
public class AdvancedScheduleFieldInfo extends ScheduleFieldInfo {
@NotNull
@JsonProperty
- @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
- private ZonedDateTime scheduleStartTime;
+ @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX")
+ private LocalDateTime scheduleStartTime;
@NotNull
@JsonProperty
- @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
- private ZonedDateTime scheduleStopTime;
+ @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX")
+ private LocalDateTime scheduleStopTime;
public AdvancedScheduleFieldInfo(LocalDateTime scheduleStartTime, LocalDateTime scheduleStopTime) {
- this.scheduleStartTime = ZonedDateTime.from(scheduleStartTime);
- this.scheduleStopTime = ZonedDateTime.from(scheduleStopTime);
+ this.scheduleStartTime = scheduleStartTime;
+ this.scheduleStopTime = scheduleStopTime;
}
public AdvancedScheduleFieldInfo() {
}
- public ZonedDateTime getScheduleStartTime() {
+ public LocalDateTime getScheduleStartTime() {
return scheduleStartTime;
}
- public void setScheduleStartTime(ZonedDateTime scheduleStartTime) {
+ public void setScheduleStartTime(LocalDateTime scheduleStartTime) {
this.scheduleStartTime = scheduleStartTime;
}
- public ZonedDateTime getScheduleStopTime() {
+ public LocalDateTime getScheduleStopTime() {
return scheduleStopTime;
}
- public void setScheduleStopTime(ZonedDateTime scheduleStopTime) {
+ public void setScheduleStopTime(LocalDateTime scheduleStopTime) {
this.scheduleStopTime = scheduleStopTime;
}
}
diff --git a/backend/src/main/java/core/repositories/timemanager/TaskgroupRepository.java b/backend/src/main/java/core/repositories/timemanager/TaskgroupRepository.java
index b2699ac..c948f02 100644
--- a/backend/src/main/java/core/repositories/timemanager/TaskgroupRepository.java
+++ b/backend/src/main/java/core/repositories/timemanager/TaskgroupRepository.java
@@ -13,8 +13,6 @@ import java.util.List;
@Repository
public interface TaskgroupRepository extends CrudRepository {
- boolean existsByTaskgroupNameAndUser(String name, User user);
-
@Query("SELECT tg FROM Taskgroup tg WHERE tg.user.username = ?1")
List findAllByUser(String username);
diff --git a/backend/src/main/java/core/services/TaskScheduleService.java b/backend/src/main/java/core/services/TaskScheduleService.java
index 0891a53..3f970a6 100644
--- a/backend/src/main/java/core/services/TaskScheduleService.java
+++ b/backend/src/main/java/core/services/TaskScheduleService.java
@@ -56,7 +56,7 @@ public class TaskScheduleService {
return new ServiceResult<>(ServiceExitCode.INVALID_PARAMETER);
}
- AdvancedTaskSchedule advancedTaskSchedule = new AdvancedTaskSchedule(task, scheduleFieldInfo.getScheduleStartTime().toLocalDateTime(), scheduleFieldInfo.getScheduleStopTime().toLocalDateTime());
+ AdvancedTaskSchedule advancedTaskSchedule = new AdvancedTaskSchedule(task, scheduleFieldInfo.getScheduleStartTime(), scheduleFieldInfo.getScheduleStopTime());
scheduleRepository.save(advancedTaskSchedule);
return new ServiceResult<>(advancedTaskSchedule);
@@ -89,8 +89,8 @@ public class TaskScheduleService {
return new ServiceResult<>(ServiceExitCode.INVALID_PARAMETER);
}
- schedule.setScheduleStart(scheduleFieldInfo.getScheduleStartTime().toLocalDateTime());
- schedule.setScheduleEnd(scheduleFieldInfo.getScheduleStopTime().toLocalDateTime());
+ schedule.setScheduleStart(scheduleFieldInfo.getScheduleStartTime());
+ schedule.setScheduleEnd(scheduleFieldInfo.getScheduleStopTime());
scheduleRepository.save(schedule);
return new ServiceResult<>(schedule);
}
diff --git a/backend/src/main/java/core/services/TaskgroupService.java b/backend/src/main/java/core/services/TaskgroupService.java
index 11f2fc3..3e0d725 100644
--- a/backend/src/main/java/core/services/TaskgroupService.java
+++ b/backend/src/main/java/core/services/TaskgroupService.java
@@ -39,32 +39,34 @@ public class TaskgroupService {
throw new NoSuchElementException();
}
- if(!taskgroupRepository.existsByTaskgroupNameAndUser(taskData.getName(), user.get())) {
- Taskgroup taskgroup;
- if(taskData.getParentID() < 0) {
- taskgroup = new Taskgroup(taskData.getName(), user.get());
+ Taskgroup taskgroup;
+ if(taskData.getParentID() < 0) {
+ if(existTaskgroupOnTaskgroupLevel(null, taskData.getName(), username)) {
+ return new ServiceResult<>(ServiceExitCode.ENTITY_ALREADY_EXIST);
} else {
- Optional parentTaskgroup = taskgroupRepository.findById(taskData.getParentID());
- if(parentTaskgroup.isEmpty()) {
- return new ServiceResult<>(ServiceExitCode.MISSING_ENTITY);
- } else {
- taskgroup = new Taskgroup(taskData.getName(), user.get());
- taskgroup.setParent(parentTaskgroup.get());
- parentTaskgroup.get().getChildren().add(taskgroup);
- }
+ taskgroup = new Taskgroup(taskData.getName(), user.get());
}
- taskgroupRepository.save(taskgroup);
- return new ServiceResult<>(taskgroup);
- } else {
- return new ServiceResult<>(ServiceExitCode.ENTITY_ALREADY_EXIST);
+ } else{
+ Optional parentTaskgroup = taskgroupRepository.findById(taskData.getParentID());
+ if(parentTaskgroup.isEmpty()) {
+ return new ServiceResult<>(ServiceExitCode.MISSING_ENTITY);
+ } else if(existTaskgroupOnTaskgroupLevel(parentTaskgroup.get(), taskData.getName(), username)) {
+ return new ServiceResult<>(ServiceExitCode.ENTITY_ALREADY_EXIST);
+ } else {
+ taskgroup = new Taskgroup(taskData.getName(), user.get());
+ taskgroup.setParent(parentTaskgroup.get());
+ parentTaskgroup.get().getChildren().add(taskgroup);
+ }
}
+ taskgroupRepository.save(taskgroup);
+ return new ServiceResult<>(taskgroup);
}
public ServiceExitCode editTaskgroup(Taskgroup taskgroup, TaskgroupFieldInfo taskgroupFieldInfo) {
if(!taskgroup.getTaskgroupName().equals(taskgroupFieldInfo.getName())) {
//Check if another taskgroup with the new name is already existent for the user of the taskgroup
- if(!taskgroupRepository.existsByTaskgroupNameAndUser(taskgroupFieldInfo.getName(), taskgroup.getUser())) {
+ if(!existTaskgroupOnTaskgroupLevel(taskgroup.getParent(), taskgroupFieldInfo.getName(), taskgroup.getUser().getUsername())) {
taskgroup.setTaskgroupName(taskgroupFieldInfo.getName());
taskgroupRepository.save(taskgroup);
return ServiceExitCode.OK;
@@ -76,6 +78,24 @@ public class TaskgroupService {
}
}
+ private boolean existTaskgroupOnTaskgroupLevel(Taskgroup taskgroup, String taskgroupName, String username) {
+ if(taskgroup == null) {
+ List topTaskgroups = getTopTaskgroupsByUser(username);
+ for(Taskgroup taskgroup1 : topTaskgroups) {
+ if(taskgroup1.getTaskgroupName().equals(taskgroupName)) {
+ return true;
+ }
+ }
+ } else {
+ for(Taskgroup sibling : taskgroup.getChildren()) {
+ if(sibling.getTaskgroupName().equals(taskgroupName)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
public void deleteTaskgroup(Taskgroup taskgroup) {
taskgroupRepository.delete(taskgroup);
}
diff --git a/backend/src/test/java/core/taskgroups/TaskgroupRepsitoryTest.java b/backend/src/test/java/core/taskgroups/TaskgroupRepsitoryTest.java
index 1172aa8..9a80085 100644
--- a/backend/src/test/java/core/taskgroups/TaskgroupRepsitoryTest.java
+++ b/backend/src/test/java/core/taskgroups/TaskgroupRepsitoryTest.java
@@ -37,25 +37,6 @@ public class TaskgroupRepsitoryTest {
assertEquals(8, result_user1.size());
}
- @Test
- @Sql("classpath:taskgroupRepositoryTestEntries.sql")
- void existsByTaskgroupNameAndUser() {
- User testUser1 = testEntityManager.find(User.class, 1L);
- User testUser2 = testEntityManager.find(User.class, 2L);
-
- //Situation 1: Taskgroup exists but within another user
- assertFalse(taskgroupRepository.existsByTaskgroupNameAndUser("No children", testUser2));
-
- //Situation 2: Taskgroup exists not
- assertFalse(taskgroupRepository.existsByTaskgroupNameAndUser("ada", testUser1));
-
- //Situation 3: Taskgroup (top) exists on user
- assertTrue(taskgroupRepository.existsByTaskgroupNameAndUser("No children", testUser1));
-
- //Situation 4: Taskgroup exists on user but not on top level
- assertTrue(taskgroupRepository.existsByTaskgroupNameAndUser("Taskgroup 1.1", testUser1));
- }
-
@Test
@Sql("classpath:taskgroupRepositoryTestEntries.sql")
void findAllTopTaskgroupsByUser() {
diff --git a/frontend/src/app/schedules/advanced-scheduler/advanced-scheduler.component.ts b/frontend/src/app/schedules/advanced-scheduler/advanced-scheduler.component.ts
index ca801bd..b4231b0 100644
--- a/frontend/src/app/schedules/advanced-scheduler/advanced-scheduler.component.ts
+++ b/frontend/src/app/schedules/advanced-scheduler/advanced-scheduler.component.ts
@@ -132,6 +132,8 @@ export class AdvancedSchedulerComponent implements OnInit, OnChanges{
schedule() {
if(this.scheduleInfo == undefined) {
+ console.log("Direct Date" + this.selectedStartTime!.toString())
+ console.log("Moment Format" + moment(this.selectedStartTime!).format('YYYY-MM-DDTHH:mm:ss.SSSZ'))
this.scheduleService.schedulesTaskIDAdvancedPut(this.task!.taskID, {
scheduleStartTime: moment(this.selectedStartTime!).format('YYYY-MM-DDTHH:mm:ss.SSSZ'),
scheduleStopTime: moment(this.selectedStopTime!).format('YYYY-MM-DDTHH:mm:ss.SSSZ')
@@ -141,6 +143,8 @@ export class AdvancedSchedulerComponent implements OnInit, OnChanges{
}
})
} else {
+ console.log("Direct Date" + this.selectedStartTime!.toString())
+ console.log("Moment Format" + moment(this.selectedStartTime!).format('YYYY-MM-DDTHH:mm:ss.SSSZ'))
this.scheduleService.schedulesScheduleIDAdvancedPost(this.scheduleInfo.scheduleID!, {
scheduleStartTime: moment(this.selectedStartTime!).format('YYYY-MM-DDTHH:mm:ss.SSSZ'),
scheduleStopTime: moment(this.selectedStopTime!).format('YYYY-MM-DDTHH:mm:ss.SSSZ')