diff --git a/backend/.idea/workspace.xml b/backend/.idea/workspace.xml index 9e500e1..26b0173 100644 --- a/backend/.idea/workspace.xml +++ b/backend/.idea/workspace.xml @@ -5,13 +5,8 @@ - - - - - - + @@ -48,31 +43,31 @@ - { + "keyToString": { + "RequestMappingsPanelOrder0": "0", + "RequestMappingsPanelOrder1": "1", + "RequestMappingsPanelWidth0": "75", + "RequestMappingsPanelWidth1": "75", + "RunOnceActivity.OpenProjectViewOnStart": "true", + "RunOnceActivity.ShowReadmeOnStart": "true", + "WebServerToolWindowFactoryState": "false", + "git-widget-placeholder": "issue-11-angular-update", + "last_directory_selection": "D:/Programmierprojekte/TimeManager/backend/src/main/java/core/api/models/timemanager", + "last_opened_file_path": "D:/Programmierprojekte/Dicewars/client", + "node.js.detected.package.eslint": "true", + "node.js.detected.package.tslint": "true", + "node.js.selected.package.eslint": "(autodetect)", + "node.js.selected.package.tslint": "(autodetect)", + "settings.editor.selected.configurable": "swagger", + "vue.rearranger.settings.migration": "true" }, - "keyToStringList": { - "DatabaseDriversLRU": [ - "mariadb" + "keyToStringList": { + "DatabaseDriversLRU": [ + "mariadb" ] } -}]]> +} @@ -99,7 +94,8 @@ - + + diff --git a/backend/src/main/java/core/api/models/timemanager/tasks/TaskEntityInfo.java b/backend/src/main/java/core/api/models/timemanager/tasks/TaskEntityInfo.java index 4930205..6fb9121 100644 --- a/backend/src/main/java/core/api/models/timemanager/tasks/TaskEntityInfo.java +++ b/backend/src/main/java/core/api/models/timemanager/tasks/TaskEntityInfo.java @@ -20,6 +20,8 @@ public class TaskEntityInfo { private boolean finished; + private int workTime; + public TaskEntityInfo(Task task) { this.taskID = task.getTaskID(); this.taskName = task.getTaskName(); @@ -28,6 +30,7 @@ public class TaskEntityInfo { this.deadline = task.getDeadline(); this.overdue = LocalDate.now().isAfter(task.getDeadline()); this.finished = task.isFinished(); + this.workTime = task.getWorkTime(); } public long getTaskID() { @@ -85,4 +88,12 @@ public class TaskEntityInfo { public void setFinished(boolean finished) { this.finished = finished; } + + public int getWorkTime() { + return workTime; + } + + public void setWorkTime(int workTime) { + this.workTime = workTime; + } } diff --git a/backend/src/main/java/core/entities/timemanager/Task.java b/backend/src/main/java/core/entities/timemanager/Task.java index aa8a9f4..61f07d7 100644 --- a/backend/src/main/java/core/entities/timemanager/Task.java +++ b/backend/src/main/java/core/entities/timemanager/Task.java @@ -29,6 +29,8 @@ public class Task { @OneToMany(mappedBy = "task", cascade = CascadeType.ALL, fetch = FetchType.EAGER) private Set basicTaskSchedules; + private int workTime; + public Task(Taskgroup taskgroup, String taskName, LocalDate startDate, LocalDate deadline, int eta) { this.taskgroup = taskgroup; this.taskName = taskName; @@ -97,6 +99,18 @@ public class Task { this.finished = finished; } + public int getWorkTime() { + return workTime; + } + + public void setWorkTime(int workTime) { + this.workTime = workTime; + } + + public void addWorkTime(int workTime) { + this.workTime += workTime; + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/frontend/src/api/model/basicScheduleEntityInfo.ts b/frontend/src/api/model/basicScheduleEntityInfo.ts index 4bcb434..794d1ff 100644 --- a/frontend/src/api/model/basicScheduleEntityInfo.ts +++ b/frontend/src/api/model/basicScheduleEntityInfo.ts @@ -23,10 +23,14 @@ export interface BasicScheduleEntityInfo { /** * date on which the task schedule was started */ - startTime: string; + startTime?: string; /** * date on which the tasks schedule was finished */ - finishedTime: string; + finishedTime?: string; + /** + * number in minutes that the schedule was active + */ + activeTime?: number; } diff --git a/frontend/src/api/model/taskEntityInfo.ts b/frontend/src/api/model/taskEntityInfo.ts index ec68fa9..a4bab1f 100644 --- a/frontend/src/api/model/taskEntityInfo.ts +++ b/frontend/src/api/model/taskEntityInfo.ts @@ -40,5 +40,9 @@ export interface TaskEntityInfo { * determines whether the task is finished */ finished: boolean; + /** + * number in minutes that was already worked on this task + */ + workTime: number; } diff --git a/frontend/src/app/app-routing.module.ts b/frontend/src/app/app-routing.module.ts index 14d95c1..a3778b1 100644 --- a/frontend/src/app/app-routing.module.ts +++ b/frontend/src/app/app-routing.module.ts @@ -6,6 +6,7 @@ import {MainComponent} from "./main/main.component"; import {UserSettingsComponent} from "./user-settings/user-settings.component"; import {TaskgroupDashboardComponent} from "./taskgroups/taskgroup-dashboard/taskgroup-dashboard.component"; import {TaskDetailOverviewComponent} from "./tasks/task-detail-overview/task-detail-overview.component"; +import {SchedulerComponent} from "./schedules/scheduler/scheduler.component"; const routes: Routes = [ {path: '', component: MainComponent}, @@ -13,7 +14,8 @@ const routes: Routes = [ {path: 'user/settings', component: UserSettingsComponent}, {path: 'taskgroups', component: TaskgroupDashboardComponent}, {path: 'taskgroups/:taskgroupID', component: TaskgroupDashboardComponent}, - {path: 'taskgroups/:taskgroupID/tasks/:taskID', component: TaskDetailOverviewComponent} + {path: 'taskgroups/:taskgroupID/tasks/:taskID', component: TaskDetailOverviewComponent}, + {path: 'taskgroups/:taskgroupID/tasks/:taskID/schedule', component: SchedulerComponent} ]; @NgModule({ diff --git a/frontend/src/app/app.module.ts b/frontend/src/app/app.module.ts index a0a7517..e4aaf42 100644 --- a/frontend/src/app/app.module.ts +++ b/frontend/src/app/app.module.ts @@ -56,6 +56,7 @@ import { NavigationLinkListComponent } from './navigation-link-list/navigation-l import { TaskDetailOverviewComponent } from './tasks/task-detail-overview/task-detail-overview.component'; import {MatProgressBarModule} from "@angular/material/progress-bar"; import {MatExpansionModule} from "@angular/material/expansion"; +import { SchedulerComponent } from './schedules/scheduler/scheduler.component'; @NgModule({ declarations: [ @@ -80,7 +81,8 @@ import {MatExpansionModule} from "@angular/material/expansion"; TaskDashboardComponent, ClearTaskDialogComponent, NavigationLinkListComponent, - TaskDetailOverviewComponent + TaskDetailOverviewComponent, + SchedulerComponent ], imports: [ BrowserModule, 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 66875ad..c1f1766 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 @@ -14,7 +14,7 @@ ETA: {{task!.eta}} Minuten - Deadline: {{task!.deadline}} - + @@ -38,7 +38,7 @@ Schedules - Add + Add diff --git a/openapi.yaml b/openapi.yaml index b61ca75..ca9e1d4 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -1462,6 +1462,7 @@ components: - deadline - overdue - finished + - workTime additionalProperties: false properties: taskID: @@ -1493,6 +1494,10 @@ components: type: boolean description: determines whether the task is finished example: True + workTime: + type: number + description: number in minutes that was already worked on this task + example: 10 TaskFieldInfo: required: - taskName @@ -1522,8 +1527,6 @@ components: required: - scheduleID - scheduleDate - - startTime - - finishedTime additionalProperties: false properties: scheduleID: @@ -1542,6 +1545,10 @@ components: type: string format: date-time description: date on which the tasks schedule was finished + activeTime: + type: number + description: number in minutes that the schedule was active + example: 10 BasicScheduleFieldInfo: required: - scheduleDate
ETA: {{task!.eta}} Minuten - Deadline: {{task!.deadline}}