diff --git a/frontend/src/api/model/taskRepeatWeekDayInfo.ts b/frontend/src/api/model/taskRepeatWeekDayInfo.ts new file mode 100644 index 0000000..ed3390e --- /dev/null +++ b/frontend/src/api/model/taskRepeatWeekDayInfo.ts @@ -0,0 +1,24 @@ +/** + * API Title + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +export interface TaskRepeatWeekDayInfo { + /** + * number repeating days + */ + offset: number; + /** + * internal identifier of task + */ + taskID: number; +} + diff --git a/frontend/src/api/model/taskRepeatWeekInfo.ts b/frontend/src/api/model/taskRepeatWeekInfo.ts new file mode 100644 index 0000000..6803c5c --- /dev/null +++ b/frontend/src/api/model/taskRepeatWeekInfo.ts @@ -0,0 +1,31 @@ +/** + * API Title + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { TaskRepeatWeekDayInfo } from './taskRepeatWeekDayInfo'; + + +export interface TaskRepeatWeekInfo { + deadlineStrategy: TaskRepeatWeekInfo.DeadlineStrategyEnum; + /** + * Date until the tasks repeat + */ + endDate: string; + weekDayInfos: Array; +} +export namespace TaskRepeatWeekInfo { + export type DeadlineStrategyEnum = 'DEADLINE_EQUAL_START' | 'DEADLINE_FIT_START'; + export const DeadlineStrategyEnum = { + EqualStart: 'DEADLINE_EQUAL_START' as DeadlineStrategyEnum, + FitStart: 'DEADLINE_FIT_START' as DeadlineStrategyEnum + }; +} + + diff --git a/frontend/src/app/tasks/task-weekly-series-creator/task-weekly-series-creator.component.css b/frontend/src/app/tasks/task-weekly-series-creator/task-weekly-series-creator.component.css new file mode 100644 index 0000000..a91ad7f --- /dev/null +++ b/frontend/src/app/tasks/task-weekly-series-creator/task-weekly-series-creator.component.css @@ -0,0 +1,10 @@ +#deadline-strategy-form { + margin-top: 10px; + padding-left: 10px; + padding-right: 10px; +} + +#endDate-form { + padding-left: 10px; + padding-right: 10px; +} diff --git a/frontend/src/app/tasks/task-weekly-series-creator/task-weekly-series-creator.component.html b/frontend/src/app/tasks/task-weekly-series-creator/task-weekly-series-creator.component.html new file mode 100644 index 0000000..2d18e9b --- /dev/null +++ b/frontend/src/app/tasks/task-weekly-series-creator/task-weekly-series-creator.component.html @@ -0,0 +1,50 @@ +

Configure Weekly Repeating Tasks

+
+
+ +
+ + + {{getDayOfWeek(tasks[i].startDate)}} + {{formatDate(tasks[i].startDate)}} + +

Taskname: {{tasks[i].taskName}}

+

Eta: {{tasks[i].eta}} Minutes

+

Startdate: {{formatDate(tasks[i].startDate)}}

+

Deadline: {{formatDate(tasks[i].deadline)}}

+ + Repeating-Offset + + Number of weeks until the task is to be repeated + + + + +
+
+
+
+ + Deadline-Strategy + + + {{deadlineStrategy}} + + + + + + Ending Date + + MM/DD/YYYY + + + + +
+ + +
+
+ + diff --git a/frontend/src/app/tasks/task-weekly-series-creator/task-weekly-series-creator.component.spec.ts b/frontend/src/app/tasks/task-weekly-series-creator/task-weekly-series-creator.component.spec.ts new file mode 100644 index 0000000..4c28792 --- /dev/null +++ b/frontend/src/app/tasks/task-weekly-series-creator/task-weekly-series-creator.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TaskWeeklySeriesCreatorComponent } from './task-weekly-series-creator.component'; + +describe('TaskWeeklySeriesCreatorComponent', () => { + let component: TaskWeeklySeriesCreatorComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [TaskWeeklySeriesCreatorComponent] + }); + fixture = TestBed.createComponent(TaskWeeklySeriesCreatorComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/frontend/src/app/tasks/task-weekly-series-creator/task-weekly-series-creator.component.ts b/frontend/src/app/tasks/task-weekly-series-creator/task-weekly-series-creator.component.ts new file mode 100644 index 0000000..9b40131 --- /dev/null +++ b/frontend/src/app/tasks/task-weekly-series-creator/task-weekly-series-creator.component.ts @@ -0,0 +1,83 @@ +import {Component, Inject, OnInit} from '@angular/core'; +import {MAT_DIALOG_DATA, MatDialogRef} from "@angular/material/dialog"; +import {TaskEntityInfo, TaskRepeatDayInfo, TaskRepeatWeekDayInfo, TaskseriesService} from "../../../api"; +import * as moment from "moment"; +import {FormArray, FormBuilder, FormGroup, Validators} from "@angular/forms"; +import DeadlineStrategyEnum = TaskRepeatDayInfo.DeadlineStrategyEnum; + + +@Component({ + selector: 'app-task-weekly-series-creator', + templateUrl: './task-weekly-series-creator.component.html', + styleUrls: ['./task-weekly-series-creator.component.css'] +}) +export class TaskWeeklySeriesCreatorComponent implements OnInit{ + + repeatingOffsetForm: FormGroup | undefined + availableDeadlineStrategys: DeadlineStrategyEnum[] = ["DEADLINE_EQUAL_START", "DEADLINE_FIT_START"] + + constructor(private dialogRef: MatDialogRef, + private taskRepeatingService: TaskseriesService, + @Inject(MAT_DIALOG_DATA) public tasks: TaskEntityInfo[], + private formbuilder: FormBuilder) { + } + + ngOnInit(): void { + this.repeatingOffsetForm = this.formbuilder.group({ + offsets: this.formbuilder.array(this.tasks.map(task => this.formbuilder.group({ + offsetCtrl: ['', [Validators.required, Validators.min(1)]] + }))), + deadlineStrategyCtrl: ['', Validators.required], + endingDateCtrl: ['', Validators.required] + + }) + } + + + + getDayOfWeek(date: string) { + return moment(date).format("dddd") + } + + formatDate(date: string): string { + return moment(date).format("dd, DD. MMMM YYYY") + } + + removeTaskFromRepeatingList(task: TaskEntityInfo, formIndex: number) { + this.tasks = this.tasks.filter(t => t.taskID !== task.taskID); + this.deleteOffset(formIndex) + } + + get offsets() { + return this.repeatingOffsetForm!.controls["offsets"] as FormArray + } + + deleteOffset(taskIndex: number) { + this.offsets.removeAt(taskIndex); + } + + saveRepeatingTask() { + const weekDayInfos: TaskRepeatWeekDayInfo[] = [] + const formArrayValues: {offsetCtrl: string}[] = this.offsets.value + for(let i=0; i { + this.dialogRef.close(true) + } + }) + } + + cancel() { + this.dialogRef.close(false); + } +}