All files / src/app/components/timetrack timetrack.component.ts

64.28% Statements 27/42
25% Branches 2/8
40% Functions 4/10
62.16% Lines 23/37

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 1101x 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();
    }
}