diff --git a/backend/src/main/java/core/api/models/timemanager/tasks/repeatinginfo/TaskRepeatDayInfo.java b/backend/src/main/java/core/api/models/timemanager/tasks/repeatinginfo/TaskRepeatDayInfo.java index 65d91c9..a188057 100644 --- a/backend/src/main/java/core/api/models/timemanager/tasks/repeatinginfo/TaskRepeatDayInfo.java +++ b/backend/src/main/java/core/api/models/timemanager/tasks/repeatinginfo/TaskRepeatDayInfo.java @@ -1,5 +1,7 @@ package core.api.models.timemanager.tasks.repeatinginfo; +import com.fasterxml.jackson.annotation.JsonFormat; + import java.time.LocalDate; public class TaskRepeatDayInfo { @@ -7,7 +9,8 @@ public class TaskRepeatDayInfo { private int offset; private DeadlineStrategy deadlineStrategy; - private LocalDate endDate; + @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX") + private LocalDate endingDate; public int getOffset() { return offset; @@ -25,11 +28,11 @@ public class TaskRepeatDayInfo { this.deadlineStrategy = deadlineStrategy; } - public LocalDate getEndDate() { - return endDate; + public LocalDate getEndingDate() { + return endingDate; } - public void setEndDate(LocalDate endDate) { - this.endDate = endDate; + public void setEndingDate(LocalDate endingDate) { + this.endingDate = endingDate; } } diff --git a/backend/src/main/java/core/services/TaskSeriesService.java b/backend/src/main/java/core/services/TaskSeriesService.java index 278ecf2..4c6ec67 100644 --- a/backend/src/main/java/core/services/TaskSeriesService.java +++ b/backend/src/main/java/core/services/TaskSeriesService.java @@ -30,7 +30,7 @@ public class TaskSeriesService { LocalDate currentTaskDate = rootTask.getStartDate().plusDays(taskRepeatInfo.getOffset()); TaskSerie taskSerie = new TaskSerie(); int index = 1; - while(currentTaskDate.isBefore(taskRepeatInfo.getEndDate())) { + while(currentTaskDate.isBefore(taskRepeatInfo.getEndingDate())) { Task task = Task.cloneTask(rootTask); task.setStartDate(currentTaskDate); if(taskRepeatInfo.getDeadlineStrategy() == DeadlineStrategy.DEADLINE_EQUAL_START) { @@ -45,6 +45,7 @@ public class TaskSeriesService { index++; } + taskSeriesRepository.save(taskSerie); taskRepository.saveAll(taskSerie.getTasks()); return ServiceExitCode.OK; } diff --git a/frontend/src/api/.openapi-generator/FILES b/frontend/src/api/.openapi-generator/FILES index 3595c4b..3469f4b 100644 --- a/frontend/src/api/.openapi-generator/FILES +++ b/frontend/src/api/.openapi-generator/FILES @@ -10,6 +10,7 @@ api/properties.service.ts api/schedule.service.ts api/task.service.ts api/taskgroup.service.ts +api/taskseries.service.ts api/users.service.ts configuration.ts encoder.ts @@ -47,6 +48,7 @@ model/simpleStatusResponse.ts model/taskEntityInfo.ts model/taskFieldInfo.ts model/taskOverviewInfo.ts +model/taskRepeatDayInfo.ts model/taskScheduleStopResponse.ts model/taskShortInfo.ts model/taskTaskgroupInfo.ts diff --git a/frontend/src/api/api.module.ts b/frontend/src/api/api.module.ts index 63562e7..f2f84b6 100644 --- a/frontend/src/api/api.module.ts +++ b/frontend/src/api/api.module.ts @@ -10,6 +10,7 @@ import { PropertiesService } from './api/properties.service'; import { ScheduleService } from './api/schedule.service'; import { TaskService } from './api/task.service'; import { TaskgroupService } from './api/taskgroup.service'; +import { TaskseriesService } from './api/taskseries.service'; import { UsersService } from './api/users.service'; @NgModule({ diff --git a/frontend/src/api/api/api.ts b/frontend/src/api/api/api.ts index 75dbaae..37fe840 100644 --- a/frontend/src/api/api/api.ts +++ b/frontend/src/api/api/api.ts @@ -14,6 +14,8 @@ export * from './task.service'; import { TaskService } from './task.service'; export * from './taskgroup.service'; import { TaskgroupService } from './taskgroup.service'; +export * from './taskseries.service'; +import { TaskseriesService } from './taskseries.service'; export * from './users.service'; import { UsersService } from './users.service'; -export const APIS = [AccountService, HistoryService, LoginService, NtfyService, PropertiesService, ScheduleService, TaskService, TaskgroupService, UsersService]; +export const APIS = [AccountService, HistoryService, LoginService, NtfyService, PropertiesService, ScheduleService, TaskService, TaskgroupService, TaskseriesService, UsersService]; diff --git a/frontend/src/api/model/models.ts b/frontend/src/api/model/models.ts index 028c0ee..b09b6a8 100644 --- a/frontend/src/api/model/models.ts +++ b/frontend/src/api/model/models.ts @@ -29,6 +29,7 @@ export * from './simpleStatusResponse'; export * from './taskEntityInfo'; export * from './taskFieldInfo'; export * from './taskOverviewInfo'; +export * from './taskRepeatDayInfo'; export * from './taskScheduleStopResponse'; export * from './taskShortInfo'; export * from './taskTaskgroupInfo'; diff --git a/frontend/src/api/model/ntfyInformation.ts b/frontend/src/api/model/ntfyInformation.ts index 5919525..1803174 100644 --- a/frontend/src/api/model/ntfyInformation.ts +++ b/frontend/src/api/model/ntfyInformation.ts @@ -23,7 +23,7 @@ export interface NtfyInformation { /** * username of ntfy account for publishing news */ - ntfy_user: string; + ntfy_user?: string; /** * token to ntfy useraccount */ diff --git a/frontend/src/app/app.module.ts b/frontend/src/app/app.module.ts index 61f2d42..080df50 100644 --- a/frontend/src/app/app.module.ts +++ b/frontend/src/app/app.module.ts @@ -91,6 +91,8 @@ import {MatGridListModule} from "@angular/material/grid-list"; import { StopScheduleManuallyComponent } from './dashboard/active-schedule/stop-schedule-manually/stop-schedule-manually.component'; import { ConnectionSettingsComponent } from './user-settings/connection-settings/connection-settings.component'; import { NtfySettingsComponent } from './user-settings/connection-settings/ntfy-settings/ntfy-settings.component'; +import { TaskSeriesCreatorComponent } from './tasks/task-series-creator/task-series-creator.component'; +import {MatStepperModule} from "@angular/material/stepper"; @NgModule({ declarations: [ AppComponent, @@ -138,6 +140,7 @@ import { NtfySettingsComponent } from './user-settings/connection-settings/ntfy- StopScheduleManuallyComponent, ConnectionSettingsComponent, NtfySettingsComponent, + TaskSeriesCreatorComponent, ], imports: [ BrowserModule, @@ -181,6 +184,7 @@ import { NtfySettingsComponent } from './user-settings/connection-settings/ntfy- NgApexchartsModule, MatButtonToggleModule, MatGridListModule, + MatStepperModule, ], providers: [ HttpClientModule, diff --git a/frontend/src/app/tasks/task-detail-overview/task-detail-overview.component.html b/frontend/src/app/tasks/task-detail-overview/task-detail-overview.component.html index d745f2b..7b87743 100644 --- a/frontend/src/app/tasks/task-detail-overview/task-detail-overview.component.html +++ b/frontend/src/app/tasks/task-detail-overview/task-detail-overview.component.html @@ -29,7 +29,7 @@ - + diff --git a/frontend/src/app/tasks/task-detail-overview/task-detail-overview.component.ts b/frontend/src/app/tasks/task-detail-overview/task-detail-overview.component.ts index e28a744..d557009 100644 --- a/frontend/src/app/tasks/task-detail-overview/task-detail-overview.component.ts +++ b/frontend/src/app/tasks/task-detail-overview/task-detail-overview.component.ts @@ -17,6 +17,7 @@ import {TaskEditorData} from "../task-editor/TaskEditorData"; import * as moment from "moment"; import {ScheduleDashboardComponent} from "../../schedules/schedule-dashboard/schedule-dashboard.component"; import {TaskStatusService} from "../task-status.service"; +import {TaskSeriesCreatorComponent} from "../task-series-creator/task-series-creator.component"; @Component({ selector: 'app-task-detail-overview', @@ -158,4 +159,11 @@ export class TaskDetailOverviewComponent implements OnInit { } }) } + + openRepeatingTaskEditor() { + const dialogRef = this.dialog.open(TaskSeriesCreatorComponent, { + data: this.task!, + minWidth: "400px" + }) + } } diff --git a/frontend/src/app/user-settings/connection-settings/ntfy-settings/ntfy-settings.component.ts b/frontend/src/app/user-settings/connection-settings/ntfy-settings/ntfy-settings.component.ts index 3b9e8ee..d7ad51f 100644 --- a/frontend/src/app/user-settings/connection-settings/ntfy-settings/ntfy-settings.component.ts +++ b/frontend/src/app/user-settings/connection-settings/ntfy-settings/ntfy-settings.component.ts @@ -24,7 +24,7 @@ export class NtfySettingsComponent { next: resp => { this.host_formCtrl.setValue(resp.ntfy_host); this.topic_formCtrl.setValue(resp.ntfy_topic); - this.user_formCtrl.setValue(resp.ntfy_user); + this.user_formCtrl.setValue(resp.ntfy_user!); this.token_formCtrl.setValue(resp.ntfy_token!); } })