blob: 3ec0c59d558420160a92cad51db27d2f9d42d249 [file] [log] [blame]
/********************************************************************************
* Copyright © 2018 Mettenmeier GmbH.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
********************************************************************************/
import { Component, OnInit, Injector, OnDestroy } from '@angular/core';
import { Validators } from '@angular/forms';
import { Subscription } from 'rxjs';
import { saveAs } from 'file-saver';
import { StandbylistObject } from '@shared/model/StandbylistObject';
import { AbstractFormComponent } from '@shared/abstract/abstract-form/abstract-form.component';
import { MasterdataService } from '@masterdata/services/masterdata.service';
import { ReportingService } from '@reporting/services/reporting.service';
import { ReportObject } from '@shared/model/ReportObject';
import { FormUtil } from '@shared/utils/form.util';
import { DatepickerValidator } from '@shared/validators/datepicker.validator';
import { AuthenticationService } from '@core/services/authentication.service';
import { UserDropdownObject } from '@shared/model/UserDropdownObject';
@Component({
selector: 'ok-standby-reporting',
templateUrl: './standby-reporting.component.html',
styleUrls: ['./standby-reporting.component.scss']
})
export class StandbyReportingComponent extends AbstractFormComponent implements OnInit, OnDestroy {
constructor(
private masterDataService: MasterdataService,
private reportingService: ReportingService,
private injector: Injector,
public authService: AuthenticationService) {
super(injector);
}
standbylistSelectionData = [];
userSelectionData = [];
reportSelectionData = [];
isSearchingPerson = false;
standbyListData$: Subscription;
userData$: Subscription;
reportData$: Subscription;
getFormData() {
this.standbyListData$ = this.masterDataService.getStandbyListSelection().subscribe((standbylistRes: StandbylistObject[]) => {
this.standbylistSelectionData = standbylistRes;
});
this.userData$ = this.masterDataService.getUserlistDropdown().subscribe((userRes: UserDropdownObject[]) => {
this.userSelectionData = userRes;
});
this.reportData$ = this.reportingService.getReportData().subscribe((reportRes: ReportObject[]) => {
this.reportSelectionData = reportRes;
});
}
generate() {
if (FormUtil.validate(this.form)) {
const formValue = this.form.getRawValue();
FormUtil.formatDates(formValue, ['validFrom', 'validTo']);
FormUtil.addTimeToDates(formValue);
const object = {
validFrom: formValue.validFrom,
validTo: formValue.validTo,
};
if (this.isSearchingPerson) {
object['userId'] = formValue['standById'];
} else {
object['standByListId'] = formValue['standById'];
}
this.reportingService.generateReport(object, formValue).subscribe(response => {
let mimeType = '';
if (formValue['printFormat'] === 'pdf') {
mimeType = 'application/pdf';
} else if (formValue['printFormat'] === 'xlsx') {
mimeType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
}
this.downLoadFile
(response,
mimeType,
formValue['reportName'],
formValue['printFormat']);
}
);
}
}
createForm() {
this.form = this.fb.group({
standById: ['', Validators.required],
reportName: ['', Validators.required],
date: this.fb.group({
validFrom: ['', Validators.required],
validTo: ['', Validators.required],
}, { validator: [DatepickerValidator.dateRangeTo('')] }),
validFromTime: { hour: 12, minute: 0 },
validToTime: { hour: 8, minute: 0 },
printFormat: ['', Validators.required],
reportLevel: ['Ist-Ebene', Validators.required],
statusId: 1
});
}
ngOnDestroy() {
if (this.standbyListData$) {
this.standbyListData$.unsubscribe();
}
if (this.userData$) {
this.userData$.unsubscribe();
}
if (this.reportData$) {
this.reportData$.unsubscribe();
}
}
setReportDefaultDays(clicked: boolean) {
const formValue = this.form.getRawValue();
if (clicked) {
const days = 7;
const validFromDate: Date = new Date(formValue.date.validFrom.year, formValue.date.validFrom.month - 1, formValue.date.validFrom.day);
FormUtil.setDefaultReportDate(this.form, 'validTo', days, validFromDate);
} else {
const days = 1;
const validFromDate: Date = new Date(formValue.date.validFrom.year, formValue.date.validFrom.month - 1, formValue.date.validFrom.day);
FormUtil.setDefaultReportDate(this.form, 'validTo', days, validFromDate);
}
}
getUserId() {
const username = this.authService.getUsername();
this.userSelectionData.forEach(element => {
const concatedName = element.firstname + ' ' + element.lastname;
if (username === concatedName) {
this.form.patchValue({
standById: element.id
});
}
});
}
setDefaultDate(field: string) {
FormUtil.setDefaultDate(this.form, field);
}
ngOnInit() {
this.createForm();
this.form.controls.reportName.valueChanges.subscribe((val) => {
if (val === 'Persönlicher_Einsatzplan') {
this.isSearchingPerson = true;
this.getUserId();
this.form.patchValue({ standById: '' });
} else {
this.form.patchValue({ standById: '' });
this.isSearchingPerson = false;
}
});
this.getFormData();
this.setDefaultDate('validFrom');
this.setReportDefaultDays(false);
}
downLoadFile(data: any, type: string, reportName: string, printFormat: string) {
const blob: Blob = new Blob([data], { type: type });
const fileName: string = reportName + '.' + printFormat.toLocaleLowerCase();
saveAs(blob, fileName);
}
}