diff --git a/backend/.idea/workspace.xml b/backend/.idea/workspace.xml
index a080dca..6d6f511 100644
--- a/backend/.idea/workspace.xml
+++ b/backend/.idea/workspace.xml
@@ -4,13 +4,13 @@
-
+
-
-
-
+
+
+
+
-
@@ -223,7 +223,7 @@
-
+
@@ -529,15 +529,29 @@
1699730764558
-
+
+
+ 1699783953060
+
+
+
+ 1699783953060
+
+
+
+ 1699783968670
+
+
+
+ 1699783968670
+
+
-
-
@@ -561,7 +575,9 @@
-
+
+
+
@@ -576,6 +592,11 @@
68
+
+ file://$PROJECT_DIR$/src/main/java/core/api/controller/ScheduleController.java
+ 93
+
+
diff --git a/backend/src/main/java/core/entities/timemanager/AdvancedTaskSchedule.java b/backend/src/main/java/core/entities/timemanager/AdvancedTaskSchedule.java
index a7835ec..782850f 100644
--- a/backend/src/main/java/core/entities/timemanager/AdvancedTaskSchedule.java
+++ b/backend/src/main/java/core/entities/timemanager/AdvancedTaskSchedule.java
@@ -44,6 +44,22 @@ public class AdvancedTaskSchedule extends AbstractSchedule {
}
+ public LocalDateTime getScheduleStart() {
+ return scheduleStart;
+ }
+
+ public void setScheduleStart(LocalDateTime scheduleStart) {
+ this.scheduleStart = scheduleStart;
+ }
+
+ public LocalDateTime getScheduleEnd() {
+ return scheduleEnd;
+ }
+
+ public void setScheduleEnd(LocalDateTime scheduleEnd) {
+ this.scheduleEnd = scheduleEnd;
+ }
+
@Override
public ScheduleInfo toScheduleInfo() {
int activeMinutes = calcActiveMinutes();
diff --git a/backend/src/main/java/core/services/TaskScheduleService.java b/backend/src/main/java/core/services/TaskScheduleService.java
index 2473743..39558bc 100644
--- a/backend/src/main/java/core/services/TaskScheduleService.java
+++ b/backend/src/main/java/core/services/TaskScheduleService.java
@@ -89,8 +89,8 @@ public class TaskScheduleService {
return new ServiceResult<>(ServiceExitCode.INVALID_PARAMETER);
}
- schedule.setStartTime(scheduleFieldInfo.getScheduleStartTime());
- schedule.setStopTime(scheduleFieldInfo.getScheduleStopTime());
+ schedule.setScheduleStart(scheduleFieldInfo.getScheduleStartTime());
+ schedule.setScheduleEnd(scheduleFieldInfo.getScheduleStopTime());
scheduleRepository.save(schedule);
return new ServiceResult<>(schedule);
}
diff --git a/backend/src/main/resources/application.properties b/backend/src/main/resources/application.properties
index 259a355..0166c5b 100644
--- a/backend/src/main/resources/application.properties
+++ b/backend/src/main/resources/application.properties
@@ -40,4 +40,5 @@ spring.servlet.multipart.max-file-size=4196KB
spring.servlet.multipart.max-request-size=4196KB
demo.webapp.jwtSecret=demoWebappSecretKey
-demo.webapp.jwtExpirationMS=86400000
\ No newline at end of file
+demo.webapp.jwtExpirationMS=86400000
+spring.jackson.time-zone=UTC
\ No newline at end of file
diff --git a/frontend/src/app/date-time-picker/date-time-picker.component.ts b/frontend/src/app/date-time-picker/date-time-picker.component.ts
index d37b992..9aef437 100644
--- a/frontend/src/app/date-time-picker/date-time-picker.component.ts
+++ b/frontend/src/app/date-time-picker/date-time-picker.component.ts
@@ -2,6 +2,7 @@ import {Component, EventEmitter, Input, OnChanges, OnInit, Output, ViewChild} fr
import {MatDatepicker} from "@angular/material/datepicker";
import {NgxMaterialTimepickerComponent, NgxMaterialTimepickerToggleComponent} from "ngx-material-timepicker";
import {FormControl, Validators} from "@angular/forms";
+import * as moment from "moment";
@Component({
selector: 'app-date-time-picker',
@@ -45,7 +46,8 @@ export class DateTimePickerComponent implements OnInit, OnChanges{
const [hours, minutes] = time.split(":")
selectedDate.setHours(parseInt(hours, 10));
selectedDate.setMinutes(parseInt(minutes, 10));
-
this.timeSet.emit(selectedDate);
+
+
}
}
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 631ca86..ff90c90 100644
--- a/frontend/src/app/schedules/advanced-scheduler/advanced-scheduler.component.ts
+++ b/frontend/src/app/schedules/advanced-scheduler/advanced-scheduler.component.ts
@@ -18,6 +18,7 @@ import {
TaskgroupEntityInfo
} from "../../../api";
import {DateTimePickerComponent} from "../../date-time-picker/date-time-picker.component";
+import * as moment from "moment";
@Component({
selector: 'app-advanced-scheduler',
@@ -84,6 +85,7 @@ export class AdvancedSchedulerComponent implements OnInit, OnChanges{
this.selectedStartTime = selectedDate;
this.startTimePicker!.setDateTime(selectedDate);
+
this.calcFutureProgress();
}
@@ -130,8 +132,8 @@ export class AdvancedSchedulerComponent implements OnInit, OnChanges{
schedule() {
if(this.scheduleInfo == undefined) {
this.scheduleService.schedulesTaskIDAdvancedPut(this.task!.taskID, {
- scheduleStartTime: this.selectedStartTime!.toISOString(),
- scheduleStopTime: this.selectedStopTime!.toISOString()
+ scheduleStartTime: moment(this.selectedStartTime!).format('YYYY-MM-DDTHH:mm:ss.SSSZ'),
+ scheduleStopTime: moment(this.selectedStopTime!).format('YYYY-MM-DDTHH:mm:ss.SSSZ')
}).subscribe({
next: resp => {
this.onSchedule.emit(resp as AdvancedScheduleInfo);
@@ -139,11 +141,12 @@ export class AdvancedSchedulerComponent implements OnInit, OnChanges{
})
} else {
this.scheduleService.schedulesScheduleIDAdvancedPost(this.scheduleInfo.scheduleID!, {
- scheduleStartTime: this.selectedStartTime!.toISOString(),
- scheduleStopTime: this.selectedStopTime!.toISOString()
+ scheduleStartTime: moment(this.selectedStartTime!).format('YYYY-MM-DDTHH:mm:ss.SSSZ'),
+ scheduleStopTime: moment(this.selectedStopTime!).format('YYYY-MM-DDTHH:mm:ss.SSSZ')
}).subscribe({
next: resp => {
this.onSchedule.emit(resp as AdvancedScheduleInfo);
+ console.log("Rescheduled")
}
})
}
diff --git a/frontend/src/app/schedules/scheduler/scheduler.component.ts b/frontend/src/app/schedules/scheduler/scheduler.component.ts
index dcc366b..01810f5 100644
--- a/frontend/src/app/schedules/scheduler/scheduler.component.ts
+++ b/frontend/src/app/schedules/scheduler/scheduler.component.ts
@@ -203,6 +203,9 @@ export class SchedulerComponent implements OnInit{
title: this.computeTaskPath(schedule.taskgroupPath, schedule.task),
color: color,
allDay: true,
+ meta: {
+ ID: this.scheduleID
+ }
})
this.refresh.next();
}
@@ -225,8 +228,11 @@ export class SchedulerComponent implements OnInit{
return this.task!;
}
- findEventByTaskPath(taskPath: string, advanced: boolean) {
+ findEventByTaskPath(taskPath: string, advanced: boolean, scheduleID: number | undefined) {
const events : CalendarEvent[] = this.events.filter(event => event.title == taskPath);
+ if(scheduleID != -1) {
+ return this.events.find(calendarEvent => calendarEvent.meta.ID == scheduleID);
+ }
if(advanced) {
return events.find(calendarEvent => !calendarEvent.allDay)
} else {
@@ -235,7 +241,7 @@ export class SchedulerComponent implements OnInit{
}
eventTimesExternalChange(selectedDate: Date, start: boolean) {
- const event: CalendarEvent| undefined = this.findEventByTaskPath(this.computeTaskPath(this.taskgroupPath, this.task!), true);
+ const event: CalendarEvent| undefined = this.findEventByTaskPath(this.computeTaskPath(this.taskgroupPath, this.task!), true, this.scheduleID);
if(event == undefined) {
if(start) {
this.events.push({
@@ -245,6 +251,9 @@ export class SchedulerComponent implements OnInit{
resizable: {
beforeStart: true,
afterEnd: true
+ },
+ meta: {
+ ID: -1
}
})
} else {
@@ -256,6 +265,9 @@ export class SchedulerComponent implements OnInit{
resizable: {
beforeStart: true,
afterEnd: true
+ },
+ meta: {
+ ID: -1
}
})
this.advancedScheduler!.setStartTime(updatedDate);
@@ -274,7 +286,7 @@ export class SchedulerComponent implements OnInit{
}
onAdvancedSchedule(schedule: AdvancedScheduleInfo) {
- const event: CalendarEvent| undefined = this.findEventByTaskPath(this.computeTaskPath(schedule.taskgroupPath, schedule.task), true);
+ const event: CalendarEvent| undefined = this.findEventByTaskPath(this.computeTaskPath(schedule.taskgroupPath, schedule.task), true, this.scheduleID);
if(event == undefined) {
this.events.push({
title: this.computeTaskPath(schedule.taskgroupPath, schedule.task),
@@ -284,6 +296,9 @@ export class SchedulerComponent implements OnInit{
resizable: {
beforeStart: false,
afterEnd: false
+ },
+ meta: {
+ ID: this.scheduleID
}
})
@@ -311,6 +326,9 @@ export class SchedulerComponent implements OnInit{
title: this.computeTaskPath(schedule.taskgroupPath, schedule.task),
color: color,
allDay: false,
+ meta: {
+ ID: schedule.scheduleID
+ }
})
this.refresh.next();
}
diff --git a/openapi.yaml b/openapi.yaml
index 41c2e57..1a2067f 100644
--- a/openapi.yaml
+++ b/openapi.yaml
@@ -2487,10 +2487,10 @@ components:
properties:
scheduleStartTime:
type: string
- format: date
+ format: date-time
scheduleStopTime:
type: string
- format: date
+ format: date-time
AdvancedScheduleFieldInfo:
required:
- scheduleStartTime