Projekt

Obecné

Profil

Stáhnout (5.08 KB) Statistiky
| Větev: | Tag: | Revize:
1 696f3358 Václav Jirák
import {Component, OnInit, ViewChild} from '@angular/core';
2 3fcf8b67 Hung Hoang
import {MatDialog} from '@angular/material';
3 696f3358 Václav Jirák
import {AddVacationDialogComponent} from '../../add-vacation-dialog/add-vacation-dialog.component';
4 fd5ab42e Hung Hoang
import {UsersService} from '../../services/api/users.service';
5 696f3358 Václav Jirák
import {AuthorizationRequest, VacationRequest} from '../../models/requests.model';
6 fd5ab42e Hung Hoang
import {UserService} from '../../services/api/user.service';
7 3fcf8b67 Hung Hoang
import {UserProfile} from '../../models/user.model';
8 696f3358 Václav Jirák
import {LocalizationService} from '../../localization/localization.service';
9 9780795f Václav Jirák
import {RequestStatus, RequestTypes, UserType} from '../../enums/common.enum';
10 696f3358 Václav Jirák
import {Calendar} from '../../models/calendar.model';
11
import {DateToolsService} from '../../services/util/date-tools.service';
12 0d1b0550 Václav Jirák
13
@Component({
14
  selector: 'app-employer-dashboard',
15
  templateUrl: './employer-dashboard.component.html',
16
  styleUrls: ['./employer-dashboard.component.sass']
17
})
18
export class EmployerDashboardComponent implements OnInit {
19 696f3358 Václav Jirák
  @ViewChild('dayPicker') calendar;
20 0d1b0550 Václav Jirák
21 696f3358 Václav Jirák
  private profile: UserProfile;
22
  private authorizationRequests: AuthorizationRequest[];
23
  private vacationRequests: VacationRequest[];
24
  private oncomingVacation: Calendar[];
25 0d1b0550 Václav Jirák
26 3bcb12a4 Václav Jirák
  private selectedMonth: Date;
27 a878ce1c Václav Jirák
28 9c7b1b63 Václav Jirák
  constructor(
29
    public dialog: MatDialog,
30 696f3358 Václav Jirák
    private localizationService: LocalizationService,
31
    private dateToolsService: DateToolsService,
32 9c7b1b63 Václav Jirák
    private userService: UserService,
33
    private usersService: UsersService
34
  ) { }
35 0d1b0550 Václav Jirák
36
  ngOnInit() {
37 3bcb12a4 Václav Jirák
    this.selectedMonth = this.dateToolsService.toStartOfMonth(new Date());
38
39 aab2b127 Václav Jirák
    this.userService.getLoggedUserProfile()
40
      .subscribe((data: UserProfile) => {
41
        this.profile = data;
42
        if (this.isEmployer()) {
43
          this.loadAuthorizationRequests();
44
          this.loadVacationRequests();
45
        }
46
      });
47
48 3bcb12a4 Václav Jirák
    this.loadMonthVacation(this.selectedMonth);
49 696f3358 Václav Jirák
    this.loadOncomingVacation();
50 0d1b0550 Václav Jirák
  }
51
52 696f3358 Václav Jirák
  userApproved(requestId: number, approved: boolean) {
53
    this.requestApproved(requestId, RequestTypes.AUTHORIZATION, approved)
54 a878ce1c Václav Jirák
      .subscribe(() => this.loadAuthorizationRequests());
55 0d1b0550 Václav Jirák
  }
56
57 696f3358 Václav Jirák
  vacationApproved(requestId: number, approved: boolean) {
58
    this.requestApproved(requestId, RequestTypes.VACATION, approved)
59 a878ce1c Václav Jirák
      .subscribe(() => this.loadVacationRequests());
60 696f3358 Václav Jirák
  }
61
62
  requestApproved(requestId: number, requestType: RequestTypes, approved: boolean) {
63
    const request = {
64
      id: requestId,
65
      status: approved ? RequestStatus.ACCEPTED : RequestStatus.REJECTED
66
    };
67
68
    return this.userService.putUserRequestWithLanguage(request, requestType, this.localizationService.getCurrentLanguage());
69
  }
70
71
  removeVacation(vac: Calendar) {
72
    this.userService.deleteCalendar(vac.id, this.localizationService.getCurrentLanguage())
73 a878ce1c Václav Jirák
      .subscribe(() => {
74
        this.loadOncomingVacation();
75
        this.loadMonthVacation(this.selectedMonth);
76 aab2b127 Václav Jirák
        this.loadProfile();
77 a878ce1c Václav Jirák
      });
78 696f3358 Václav Jirák
  }
79
80 9c7b1b63 Václav Jirák
  onDateSelect( date: Date ) {
81 696f3358 Václav Jirák
    this.dialog
82
      .open(AddVacationDialogComponent, {
83
        data: {
84 3bcb12a4 Václav Jirák
          date
85 696f3358 Václav Jirák
        }
86
      })
87
      .afterClosed().subscribe(data => {
88
        if (data && data.isConfirmed) {
89 3bcb12a4 Václav Jirák
          this.userService.postCalendarWithLanguage(
90
            {
91
              date: data.date,
92
              from: data.fromTime,
93
              to: data.toTime,
94
              type: data.vacationType
95
            },
96
            this.localizationService.getCurrentLanguage()
97 a889e829 Václav Jirák
          ).subscribe(() => {
98
            this.loadMonthVacation(this.selectedMonth);
99
            this.loadOncomingVacation();
100 aab2b127 Václav Jirák
            this.loadProfile();
101 a889e829 Václav Jirák
          });
102 696f3358 Václav Jirák
        }
103
      });
104 0d1b0550 Václav Jirák
  }
105 0e8e77b3 Václav Jirák
106 696f3358 Václav Jirák
  onSelectedMonthChange(monthStart: Date) {
107 3bcb12a4 Václav Jirák
    this.selectedMonth = monthStart;
108 696f3358 Václav Jirák
    this.loadMonthVacation(monthStart);
109
  }
110
111 9780795f Václav Jirák
  isEmployer(): boolean {
112
    if (this.profile) {
113
      return this.profile.role === UserType.EMPLOYER;
114
    } else {
115
      return false;
116
    }
117
  }
118 aab2b127 Václav Jirák
119 696f3358 Václav Jirák
  private loadProfile() {
120
    this.userService.getLoggedUserProfile()
121
      .subscribe((data: UserProfile) => this.profile = data);
122
  }
123
124
  private loadAuthorizationRequests() {
125 7479e470 Hung Hoang
    this.usersService.getAuthorizationRequestsWithLanguage(this.localizationService.getCurrentLanguage(), RequestStatus.PENDING)
126 696f3358 Václav Jirák
      .subscribe((data: AuthorizationRequest[]) => this.authorizationRequests = data);
127
  }
128
129
  private loadVacationRequests() {
130 7479e470 Hung Hoang
    this.usersService.getVacationRequestsWithLanguage(this.localizationService.getCurrentLanguage(), RequestStatus.PENDING)
131 696f3358 Václav Jirák
      .subscribe((data: VacationRequest[]) => this.vacationRequests = data);
132
  }
133
134
  private loadMonthVacation(month: Date) {
135
    const fromDate = this.dateToolsService.toStartOfMonth(month);
136
    const toDate = this.dateToolsService.toEndOfMonth(fromDate);
137
138
    this.userService.getLoggedUserCalendarWithOptions(fromDate, toDate, this.localizationService.getCurrentLanguage(), RequestStatus.ACCEPTED)
139
      .subscribe((data: Calendar[]) => {
140
        if (data) {
141
          this.calendar.setVacation(data);
142
        }
143
      });
144
  }
145
146
  private loadOncomingVacation() {
147
    const fromDate = new Date();
148
149
    this.userService.getLoggedUserCalendarWithOptions(fromDate, null, this.localizationService.getCurrentLanguage(), null)
150
      .subscribe((data: Calendar[]) => this.oncomingVacation = data);
151 0e8e77b3 Václav Jirák
  }
152 0d1b0550 Václav Jirák
}