Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | import { CommonModule } from "@angular/common";
import { ChangeDetectorRef, Component, OnDestroy, OnInit } from "@angular/core";
import { TranslateModule, TranslateService } from "@ngx-translate/core";
import { catchError, Observable, of, Subject, takeUntil } from "rxjs";
import { DateI } from "./date";
import { DatePickerComponent } from "./date-picker/date-picker.component";
import { DayViewComponent } from "./day-view/day-view.component";
import { MonthOverviewComponent } from "./month-overview/month-overview.component";
import { MonthOverviewService } from "./services/month-overview.service";
import { UserService } from "./services/user.service";
import { WorkTimeService } from "./services/work-time.service";
import { UserInfo } from "./user-info/user-info";
import { UserInfoComponent } from "./user-info/user-info.component";
import { WorkTime } from "./work-time/work-time";
@Component({
selector: "app-timetrack",
standalone: true,
imports: [
CommonModule,
TranslateModule,
UserInfoComponent,
DatePickerComponent,
DayViewComponent,
MonthOverviewComponent,
],
templateUrl: "./timetrack.component.html",
})
export class TimetrackComponent implements OnInit, OnDestroy {
stop$ = new Subject<void>();
newMonth$ = new Subject<void>();
date: DateI | undefined;
setDays: number[] | undefined;
totalWorktime: number | undefined;
expectedWorktime: number | undefined;
userInfo$!: Observable<UserInfo>;
workTime: WorkTime | undefined;
constructor (translate: TranslateService, private wtS: WorkTimeService, private readonly cdr: ChangeDetectorRef, private readonly mOS: MonthOverviewService, private readonly userService: UserService) {
translate.setDefaultLang("de");
}
ngOnInit () {
this.userInfo$ = this.userService.getUserInfo();
this.updateMonth();
}
selectDate (date: DateI) {
this.wtS.getWorktime(date)
.pipe(
catchError(() => {
return of({
breakMinutes: 0,
breaks: [],
end: undefined,
start: undefined,
workMinutes: 0,
workType: "workTime",
} as WorkTime);
}))
.subscribe(data => {
this.workTime = {
breaks: data?.breaks ?? [],
end: data?.end,
start: data?.start,
workType: data?.workType ?? "workTime",
description: data?.description,
};
});
this.cdr.detectChanges();
}
updateMonth () {
if(!this.date?.month || !this.date?.year)
return;
this.newMonth$.next();
this.mOS.getMonthOverview(this.date.year, this.date.month)
.pipe(
takeUntil(this.stop$))
.subscribe( data => {
this.totalWorktime = data.time;
this.expectedWorktime = data.expectedWorkTime;
this.setDays = data.setDays;
this.cdr.detectChanges();
});
}
deleteCurrent () {
Iif (!this.date)
return;
this.wtS.unsetWorktime(this.date).subscribe(() => this.updateMonth());
this.workTime = {
breaks: [],
end: undefined,
start: undefined,
workType: "workTime",
};
}
ngOnDestroy (): void {
this.newMonth$.complete();
this.stop$.next();
this.stop$.complete();
}
}
|