Files
barker/bookie/src/app/settings/settings.component.ts
T
tanshu d90c1cb563 Moved from moment to luxon.
Report Printing is not a post not a get.
2026-08-31 04:19:05 +00:00

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');
},
});
}
}