import { Component, OnInit, ViewChild } from '@angular/core'; import { MatButton } from '@angular/material/button'; import { MatSelect } from '@angular/material/select'; import { MatTableDataSource } from '@angular/material/table'; import { ActivatedRoute, Router } from '@angular/router'; import { FlatService, OverheadAdvanceFlatMappingService, OverheadAdvanceService, PremiseService } from '../data-object-service'; import { Flat, NULL_Flat, NULL_Premise, OverheadAdvance, OverheadAdvanceFlatMapping, Premise } from '../data-objects'; import { ExtApiService } from '../ext-data-object-service'; import { MessageService } from '../message.service'; @Component({ selector: 'app-flat-details', templateUrl: './flat-details.component.html', styleUrls: ['./flat-details.component.css'] }) export class FlatDetailsComponent implements OnInit { flat: Flat = NULL_Flat premise: Premise = NULL_Premise premises: Premise[] mappedOverheadAdvances: OverheadAdvance[] allOverheadAdvances: OverheadAdvance[] selectedOverheadAdvance: number dataSource: MatTableDataSource displayedColumns: string[] = [ "description", "amount", "startdate", "enddate" ] @ViewChild('submitButton') submitButton: MatButton @ViewChild('mapButton') mapButton: MatButton @ViewChild('mapSelect') mapSelect: MatSelect constructor( private flatService: FlatService, private premiseService: PremiseService, private extApiService: ExtApiService, private overheadAdvanceService: OverheadAdvanceService, private overheadAdvanceFlatMappingService: OverheadAdvanceFlatMappingService, private messageService: MessageService, private route: ActivatedRoute, private router: Router ) { } async getFlat(): Promise { try { const id = +this.route.snapshot.paramMap.get('id') this.messageService.add(`getFlat ${id}`) if (id != 0) { this.flat = await this.flatService.getFlat(id) this.premise = await this.premiseService.getPremise(this.flat.premise) this.mappedOverheadAdvances = await this.extApiService.getOverheadAdvancesByFlat(this.flat.id) this.dataSource = new MatTableDataSource(this.mappedOverheadAdvances) } else { this.flat = NULL_Flat this.premise = NULL_Premise this.mappedOverheadAdvances = undefined this.dataSource = undefined } } catch (err) { throw err this.messageService.add(JSON.stringify(err, undefined, 4)) } } async getPremises(): Promise { try { this.messageService.add("Trying to load premises") this.premises = await this.premiseService.getPremises() this.messageService.add("Premises loaded") } catch (err) { this.messageService.add(JSON.stringify(err, undefined, 4)) } } async getOverheadAdvances(): Promise { try { this.messageService.add("Trying to load overheadadvances") this.allOverheadAdvances = await this.overheadAdvanceService.getOverheadAdvances() this.messageService.add("overheadadvances loaded") } catch (err) { this.messageService.add(JSON.stringify(err, undefined, 4)) } } async saveFlat() { try { this.submitButton.disabled = true this.messageService.add(`saveFlat: ${ JSON.stringify(this.flat, undefined, 4) }`) if (this.flat.id == 0) { this.messageService.add("about to insert new flat") this.flat = await this.flatService.postFlat(this.flat) this.messageService.add(`Successfully added flat with id ${this.flat.id}`) } else { this.messageService.add("about to update existing flat") this.flat = await this.flatService.putFlat(this.flat) this.messageService.add(`Successfully changed flat with id ${this.flat.id}`) } this.router.navigate(['/flats']) } finally { this.submitButton.disabled = false } } async addOverheadAdvance() { try { this.mapButton.disabled = true this.messageService.add(`addOverheadAdvance: ${ JSON.stringify(this.selectedOverheadAdvance, undefined, 4) }`) let newMapping: OverheadAdvanceFlatMapping = { 'flat': this.flat.id, 'overhead_advance': this.selectedOverheadAdvance, 'id': 0 } newMapping = await this.overheadAdvanceFlatMappingService.postOverheadAdvanceFlatMapping(newMapping) this.messageService.add(`New overheadadvance flat mapping created: ${newMapping.id}`) this.selectedOverheadAdvance = undefined this.getFlat() } finally { this.mapButton.disabled = false } } ngOnInit(): void { this.messageService.add("FlatDetailsComponent.ngOnInit") this.getPremises() this.getOverheadAdvances() this.getFlat() } }