88 lines
2.9 KiB
TypeScript
88 lines
2.9 KiB
TypeScript
import { Component, computed, inject, signal } from '@angular/core';
|
|
import { form, FormField } from '@angular/forms/signals';
|
|
import { MatButtonModule } from '@angular/material/button';
|
|
import { MatCardModule } from '@angular/material/card';
|
|
import { MatDatepickerModule } from '@angular/material/datepicker';
|
|
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
import { MatInputModule } from '@angular/material/input';
|
|
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
|
import { MatSnackBar } from '@angular/material/snack-bar';
|
|
import { MatTabsModule } from '@angular/material/tabs';
|
|
import { DateTime } from 'luxon';
|
|
|
|
import { environment } from '../app.environment';
|
|
import { AuthService } from '../auth/auth.service';
|
|
import { ErrorStateComponent } from '../shared/error-state/error-state.component';
|
|
import { SkeletonLoaderComponent } from '../shared/skeleton-loader/skeleton-loader.component';
|
|
import { SettingsService } from './settings.service';
|
|
|
|
@Component({
|
|
selector: 'app-settings',
|
|
templateUrl: './settings.component.html',
|
|
styleUrls: ['./settings.component.css'],
|
|
imports: [
|
|
MatButtonModule,
|
|
MatCardModule,
|
|
MatDatepickerModule,
|
|
MatFormFieldModule,
|
|
MatInputModule,
|
|
MatSlideToggleModule,
|
|
MatTabsModule,
|
|
MatCardModule,
|
|
FormField,
|
|
ErrorStateComponent,
|
|
SkeletonLoaderComponent,
|
|
],
|
|
})
|
|
export class SettingsComponent {
|
|
private snackBar = inject(MatSnackBar);
|
|
auth = inject(AuthService);
|
|
private ser = inject(SettingsService);
|
|
prefillCustomerDiscountResource = this.ser.getPrefillCustomerDiscount();
|
|
prefillCustomerDiscount = computed(() => this.prefillCustomerDiscountResource.value()?.value ?? false);
|
|
|
|
version = environment.version;
|
|
formModel = signal({
|
|
startDate: new Date(),
|
|
finishDate: new Date(),
|
|
});
|
|
|
|
maintenanceForm = form(this.formModel);
|
|
|
|
beerFile: File | null = null;
|
|
saleFile: File | null = null;
|
|
|
|
togglePrefill() {
|
|
this.ser.setPrefillCustomerDiscount(!this.prefillCustomerDiscount()).subscribe((x) => {
|
|
this.prefillCustomerDiscountResource.value.set(x);
|
|
});
|
|
}
|
|
|
|
detectBeer(event: Event) {
|
|
this.beerFile = ((event.target as HTMLInputElement).files as FileList)[0];
|
|
}
|
|
|
|
detectSale(event: Event) {
|
|
this.saleFile = ((event.target as HTMLInputElement).files as FileList)[0];
|
|
}
|
|
|
|
runMaintenance() {
|
|
const formModel = this.formModel();
|
|
const startDate = DateTime.fromJSDate(formModel.startDate).toFormat('dd-MMM-yyyy');
|
|
const finishDate = DateTime.fromJSDate(formModel.finishDate).toFormat('dd-MMM-yyyy');
|
|
|
|
if (!this.beerFile || !this.saleFile) {
|
|
this.snackBar.open('Please choose both files first!', 'Danger');
|
|
return;
|
|
}
|
|
this.ser.runMaintenance(startDate, finishDate, this.beerFile, this.saleFile).subscribe({
|
|
next: () => {
|
|
this.snackBar.open('Maintenance done', 'Success');
|
|
},
|
|
error: (error: unknown) => {
|
|
this.snackBar.open(error as string, 'Danger');
|
|
},
|
|
});
|
|
}
|
|
}
|