some changes about fee and tenancy mapping
This commit is contained in:
parent
3dfb7e2bf2
commit
b394a16d7e
@ -8,7 +8,7 @@
|
||||
/v1/overhead_advances/flat/{flatId}:
|
||||
get:
|
||||
tags: [ "overhead_advance", "flat" ]
|
||||
summary: Return overhead_advances by $flat
|
||||
summary: Return overhead_advances by flat
|
||||
operationId: additional_methods.get_overhead_advances_by_flat
|
||||
parameters:
|
||||
- name: flatId
|
||||
@ -27,3 +27,25 @@
|
||||
$ref: '#/components/schemas/overhead_advance'
|
||||
security:
|
||||
- jwt: ['secret']
|
||||
/v1/fees/tenancy/{tenancyId}:
|
||||
get:
|
||||
tags: [ "fee", "tenancy" ]
|
||||
summary: Return fees by tenancy
|
||||
operationId: additional_methods.get_fees_by_tenancy
|
||||
parameters:
|
||||
- name: tenancyId
|
||||
in: path
|
||||
required: true
|
||||
schema:
|
||||
type: integer
|
||||
responses:
|
||||
'200':
|
||||
description: get_fees_by_tenancy response
|
||||
content:
|
||||
'application/json':
|
||||
schema:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/fee'
|
||||
security:
|
||||
- jwt: ['secret']
|
||||
|
@ -15,3 +15,13 @@ SELECT o.id ,o.description ,o.amount ,o.startdate ,o.enddate
|
||||
"params": (flatId, )
|
||||
}
|
||||
)
|
||||
|
||||
def get_fees_by_tenancy(user, token_info, tenancyId=None):
|
||||
return dbGetMany(user, token_info, {
|
||||
"statement": """
|
||||
SELECT o.id, o.description, o.amount, o.fee_type, o.startdate, o.enddate
|
||||
FROM fee_t o, tenancy_fee_mapping_t m
|
||||
WHERE o.id = m.fee and m.tenancy = %s""",
|
||||
"params": (tenancyId, )
|
||||
}
|
||||
)
|
||||
|
@ -1267,7 +1267,7 @@ paths:
|
||||
/v1/overhead_advances/flat/{flatId}:
|
||||
get:
|
||||
tags: [ "overhead_advance", "flat" ]
|
||||
summary: Return overhead_advances by $flat
|
||||
summary: Return overhead_advances by flat
|
||||
operationId: additional_methods.get_overhead_advances_by_flat
|
||||
parameters:
|
||||
- name: flatId
|
||||
@ -1286,6 +1286,28 @@ paths:
|
||||
$ref: '#/components/schemas/overhead_advance'
|
||||
security:
|
||||
- jwt: ['secret']
|
||||
/v1/fees/tenancy/{tenancyId}:
|
||||
get:
|
||||
tags: [ "fee", "tenancy" ]
|
||||
summary: Return fees by tenancy
|
||||
operationId: additional_methods.get_fees_by_tenancy
|
||||
parameters:
|
||||
- name: tenancyId
|
||||
in: path
|
||||
required: true
|
||||
schema:
|
||||
type: integer
|
||||
responses:
|
||||
'200':
|
||||
description: get_fees_by_tenancy response
|
||||
content:
|
||||
'application/json':
|
||||
schema:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/fee'
|
||||
security:
|
||||
- jwt: ['secret']
|
||||
|
||||
components:
|
||||
securitySchemes:
|
||||
|
@ -6,15 +6,20 @@ import { MessageService } from './message.service';
|
||||
import { serviceBaseUrl } from './config';
|
||||
|
||||
|
||||
import { OverheadAdvance } from './data-objects';
|
||||
import { Fee, OverheadAdvance } from './data-objects';
|
||||
|
||||
|
||||
@Injectable({ providedIn: 'root' })
|
||||
export class ExtOverheadAdvanceService {
|
||||
export class ExtApiService {
|
||||
constructor(private messageService: MessageService, private http: HttpClient) { }
|
||||
|
||||
async getOverheadAdvancesByFlat(flatId: number): Promise<OverheadAdvance[]> {
|
||||
this.messageService.add(`OverheadAdvanceService: get data by flat ${flatId}`);
|
||||
return this.http.get<OverheadAdvance[]>(`${serviceBaseUrl}/v1/overhead_advances/flat/${flatId}`).toPromise()
|
||||
async getOverheadAdvancesByFlat(id: number): Promise<OverheadAdvance[]> {
|
||||
this.messageService.add(`ExtApiService: get overheadadvances by flat ${id}`);
|
||||
return this.http.get<OverheadAdvance[]>(`${serviceBaseUrl}/v1/overhead_advances/flat/${id}`).toPromise()
|
||||
}
|
||||
|
||||
async getFeeByTenancies(id: number): Promise<Fee[]> {
|
||||
this.messageService.add(`ExtApiService: get fees by flat ${id}`);
|
||||
return this.http.get<Fee[]>(`${serviceBaseUrl}/v1/fees/tenancy/${id}`).toPromise()
|
||||
}
|
||||
}
|
||||
|
@ -5,7 +5,7 @@ import { MatTableDataSource } from '@angular/material/table';
|
||||
import { ActivatedRoute, Router } from '@angular/router';
|
||||
import { FlatService, OverheadAdvanceFlatMappingService, OverheadAdvanceService, PremiseService } from '../data-object-service';
|
||||
import { Flat, OverheadAdvance, OverheadAdvanceFlatMapping, Premise } from '../data-objects';
|
||||
import { ExtOverheadAdvanceService } from '../ext-data-object-service';
|
||||
import { ExtApiService } from '../ext-data-object-service';
|
||||
import { MessageService } from '../message.service';
|
||||
|
||||
@Component({
|
||||
@ -45,7 +45,7 @@ export class FlatDetailsComponent implements OnInit {
|
||||
constructor(
|
||||
private flatService: FlatService,
|
||||
private premiseService: PremiseService,
|
||||
private extOverheadAdvanceService: ExtOverheadAdvanceService,
|
||||
private extApiService: ExtApiService,
|
||||
private overheadAdvanceService: OverheadAdvanceService,
|
||||
private overheadAdvanceFlatMappingService: OverheadAdvanceFlatMappingService,
|
||||
private messageService: MessageService,
|
||||
@ -59,7 +59,7 @@ export class FlatDetailsComponent implements OnInit {
|
||||
if (id != 0) {
|
||||
this.flat = await this.flatService.getFlat(id)
|
||||
this.premise = await this.premiseService.getPremise(this.flat.premise)
|
||||
this.mappedOverheadAdvances = await this.extOverheadAdvanceService.getOverheadAdvancesByFlat(this.flat.id)
|
||||
this.mappedOverheadAdvances = await this.extApiService.getOverheadAdvancesByFlat(this.flat.id)
|
||||
this.dataSource = new MatTableDataSource<OverheadAdvance>(this.mappedOverheadAdvances)
|
||||
}
|
||||
} catch (err) {
|
||||
|
@ -6,14 +6,14 @@
|
||||
<mat-toolbar>Menu</mat-toolbar>
|
||||
<mat-nav-list>
|
||||
<a mat-list-item href="/tenants">Meine Mieter/innen</a>
|
||||
</mat-nav-list><hr/><mat-nav-list>
|
||||
</mat-nav-list><mat-divider></mat-divider><mat-nav-list>
|
||||
<a mat-list-item href="/flats">Meine Wohnungen</a>
|
||||
<a mat-list-item href="/parkings">Meine Garagen</a>
|
||||
<a mat-list-item href="/commercialunits">Meine Büros</a>
|
||||
</mat-nav-list><hr/><mat-nav-list>
|
||||
</mat-nav-list><mat-divider></mat-divider><mat-nav-list>
|
||||
<a mat-list-item href="/overheadadvances">Betriebskostensätze</a>
|
||||
<a mat-list-item href="/fees">Mietsätze</a>
|
||||
</mat-nav-list><hr/><mat-nav-list>
|
||||
</mat-nav-list><mat-divider></mat-divider><mat-nav-list>
|
||||
<a mat-list-item href="/premises">Meine Häuser</a>
|
||||
</mat-nav-list>
|
||||
</mat-sidenav>
|
||||
|
@ -6,6 +6,10 @@ table {
|
||||
flex: 1 1 auto;
|
||||
}
|
||||
|
||||
#addoverheadfield {
|
||||
#setenddatefield {
|
||||
margin-right: 15px;
|
||||
}
|
||||
|
||||
#addfeefield {
|
||||
margin-right: 15px;
|
||||
}
|
||||
|
@ -6,82 +6,82 @@
|
||||
</mat-card-title>
|
||||
</mat-card-header>
|
||||
<mat-card-content>
|
||||
<mat-accordion>
|
||||
<mat-expansion-panel (opened)="collapseTenantDetails = true"
|
||||
(closed)="collapseTenantDetails = false">
|
||||
<mat-expansion-panel-header>
|
||||
<mat-panel-title *ngIf="!collapseTenantDetails">
|
||||
Details
|
||||
</mat-panel-title>
|
||||
<mat-panel-description>
|
||||
<mat-accordion>
|
||||
<mat-expansion-panel (opened)="collapseTenantDetails = true"
|
||||
(closed)="collapseTenantDetails = false">
|
||||
<mat-expansion-panel-header>
|
||||
<mat-panel-title *ngIf="!collapseTenantDetails">
|
||||
Details
|
||||
</mat-panel-title>
|
||||
<mat-panel-description>
|
||||
</mat-panel-description>
|
||||
</mat-expansion-panel-header>
|
||||
<div>
|
||||
<form (ngSubmit)="saveTenant()">
|
||||
</mat-expansion-panel-header>
|
||||
<div>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>Anrede</mat-label>
|
||||
<input matInput name="salutation" [(ngModel)]="tenant.salutation"/>
|
||||
</mat-form-field>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>Vorname</mat-label>
|
||||
<input matInput name="firstname" [(ngModel)]="tenant.firstname"/>
|
||||
</mat-form-field>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>Nachname</mat-label>
|
||||
<input matInput name="lastname" [(ngModel)]="tenant.lastname"/>
|
||||
</mat-form-field>
|
||||
</div><div>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>Adresse 1 (Straße)</mat-label>
|
||||
<input matInput name="address" [(ngModel)]="tenant.address1"/>
|
||||
</mat-form-field>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>Adresse 2</mat-label>
|
||||
<input matInput name="address2" [(ngModel)]="tenant.address2"/>
|
||||
</mat-form-field>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>Adresse 3</mat-label>
|
||||
<input matInput name="address3" [(ngModel)]="tenant.address3"/>
|
||||
</mat-form-field>
|
||||
</div><div>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>PLZ</mat-label>
|
||||
<input matInput name="zip" [(ngModel)]="tenant.zip"/>
|
||||
</mat-form-field>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>Ort</mat-label>
|
||||
<input matInput name="city" [(ngModel)]="tenant.city"/>
|
||||
</mat-form-field>
|
||||
</div><div>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>Telefon 1</mat-label>
|
||||
<input matInput name="phone1" [(ngModel)]="tenant.phone1"/>
|
||||
</mat-form-field>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>Telefon 2</mat-label>
|
||||
<input matInput name="phone2" [(ngModel)]="tenant.phone2"/>
|
||||
</mat-form-field>
|
||||
</div><div>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>IBAN</mat-label>
|
||||
<input matInput name="iban" [(ngModel)]="tenant.iban"/>
|
||||
</mat-form-field>
|
||||
</div><div>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>Account ID</mat-label>
|
||||
<input matInput name="account_id" [readonly]="true" [ngModel]="account.id"/>
|
||||
</mat-form-field>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>Account Description</mat-label>
|
||||
<input matInput name="account_desc" [readonly]="true" [ngModel]="account.description"/>
|
||||
</mat-form-field>
|
||||
<form (ngSubmit)="saveTenant()">
|
||||
<div>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>Anrede</mat-label>
|
||||
<input matInput name="salutation" [(ngModel)]="tenant.salutation"/>
|
||||
</mat-form-field>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>Vorname</mat-label>
|
||||
<input matInput name="firstname" [(ngModel)]="tenant.firstname"/>
|
||||
</mat-form-field>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>Nachname</mat-label>
|
||||
<input matInput name="lastname" [(ngModel)]="tenant.lastname"/>
|
||||
</mat-form-field>
|
||||
</div><div>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>Adresse 1 (Straße)</mat-label>
|
||||
<input matInput name="address" [(ngModel)]="tenant.address1"/>
|
||||
</mat-form-field>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>Adresse 2</mat-label>
|
||||
<input matInput name="address2" [(ngModel)]="tenant.address2"/>
|
||||
</mat-form-field>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>Adresse 3</mat-label>
|
||||
<input matInput name="address3" [(ngModel)]="tenant.address3"/>
|
||||
</mat-form-field>
|
||||
</div><div>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>PLZ</mat-label>
|
||||
<input matInput name="zip" [(ngModel)]="tenant.zip"/>
|
||||
</mat-form-field>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>Ort</mat-label>
|
||||
<input matInput name="city" [(ngModel)]="tenant.city"/>
|
||||
</mat-form-field>
|
||||
</div><div>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>Telefon 1</mat-label>
|
||||
<input matInput name="phone1" [(ngModel)]="tenant.phone1"/>
|
||||
</mat-form-field>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>Telefon 2</mat-label>
|
||||
<input matInput name="phone2" [(ngModel)]="tenant.phone2"/>
|
||||
</mat-form-field>
|
||||
</div><div>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>IBAN</mat-label>
|
||||
<input matInput name="iban" [(ngModel)]="tenant.iban"/>
|
||||
</mat-form-field>
|
||||
</div><div>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>Account ID</mat-label>
|
||||
<input matInput name="account_id" [readonly]="true" [ngModel]="account.id"/>
|
||||
</mat-form-field>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>Account Description</mat-label>
|
||||
<input matInput name="account_desc" [readonly]="true" [ngModel]="account.description"/>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<button #submitButton type="submit" mat-raised-button color="primary">Speichern</button>
|
||||
</form>
|
||||
</div>
|
||||
<button #submitButton type="submit" mat-raised-button color="primary">Speichern</button>
|
||||
</form>
|
||||
</div>
|
||||
</mat-expansion-panel>
|
||||
</mat-accordion>
|
||||
</mat-expansion-panel>
|
||||
</mat-accordion>
|
||||
</mat-card-content>
|
||||
</mat-card>
|
||||
|
||||
@ -95,46 +95,112 @@
|
||||
<mat-accordion>
|
||||
<mat-expansion-panel (opened)="collapseTenancies = true"
|
||||
(closed)="collapseTenancies = false">
|
||||
<mat-expansion-panel-header>
|
||||
<mat-panel-title *ngIf="!collapseTenancies">
|
||||
Übersicht
|
||||
</mat-panel-title>
|
||||
<mat-panel-description>
|
||||
</mat-panel-description>
|
||||
</mat-expansion-panel-header>
|
||||
<div>
|
||||
<table mat-table [dataSource]="tenancyDataSource" #zftable>
|
||||
<mat-expansion-panel-header>
|
||||
<mat-panel-title *ngIf="!collapseTenancies">
|
||||
Übersicht
|
||||
</mat-panel-title>
|
||||
<mat-panel-description>
|
||||
</mat-panel-description>
|
||||
</mat-expansion-panel-header>
|
||||
<div>
|
||||
<table mat-table [dataSource]="tenancyDataSource" #zftable>
|
||||
<ng-container matColumnDef="description">
|
||||
<th mat-header-cell *matHeaderCellDef>Beschreibung</th>
|
||||
<td mat-cell *matCellDef="let element">{{element.rawTenancy.description}}</td>
|
||||
</ng-container>
|
||||
<ng-container matColumnDef="flat">
|
||||
<th mat-header-cell *matHeaderCellDef>Wohnung</th>
|
||||
<td mat-cell *matCellDef="let element">{{element.flat}}</td>
|
||||
</ng-container>
|
||||
<ng-container matColumnDef="parking">
|
||||
<th mat-header-cell *matHeaderCellDef>Garage</th>
|
||||
<td mat-cell *matCellDef="let element">{{element.parking}}</td>
|
||||
</ng-container>
|
||||
<ng-container matColumnDef="commercial_premise">
|
||||
<th mat-header-cell *matHeaderCellDef>Büro</th>
|
||||
<td mat-cell *matCellDef="let element">{{element.commercial_premise}}</td>
|
||||
</ng-container>
|
||||
<ng-container matColumnDef="startdate">
|
||||
<th mat-header-cell *matHeaderCellDef>Beginn</th>
|
||||
<td mat-cell *matCellDef="let element">{{element.rawTenancy.startdate}}</td>
|
||||
</ng-container>
|
||||
<ng-container matColumnDef="enddate">
|
||||
<th mat-header-cell *matHeaderCellDef>Ende</th>
|
||||
<td mat-cell *matCellDef="let element">{{element.rawTenancy.enddate}}</td>
|
||||
</ng-container>
|
||||
<tr mat-header-row *matHeaderRowDef="tenancyDisplayColumns"></tr>
|
||||
<tr mat-row *matRowDef="let row; columns: tenancyDisplayColumns;" (click)="setSelectedTenancy(row.rawTenancy)"></tr>
|
||||
</table>
|
||||
</div>
|
||||
</mat-expansion-panel>
|
||||
</mat-accordion>
|
||||
</mat-card-content>
|
||||
</mat-card>
|
||||
|
||||
<mat-card class="defaultCard" *ngIf="selectedTenancy">
|
||||
<mat-card-header>
|
||||
<mat-card-title>
|
||||
<span>{{selectedTenancy.description}}</span>
|
||||
<button mat-icon-button color="accent" aria-label="Schließen" (click)="clearSelectedTenancy()">
|
||||
<mat-icon>done</mat-icon>
|
||||
</button>
|
||||
</mat-card-title>
|
||||
</mat-card-header>
|
||||
<mat-card-content>
|
||||
Mietdetails: {{selectedTenancy.description}}
|
||||
|
||||
<div>
|
||||
<form (ngSubmit)="setTenancyEndData()">
|
||||
<mat-form-field appearance="outline" id="setenddatefield">
|
||||
<mat-label>Ende</mat-label>
|
||||
<input matInput name="enddate" [(ngModel)]="selectedTenancy.enddate" [matDatepicker]="enddatepicker"/>
|
||||
<mat-datepicker-toggle matSuffix [for]="enddatepicker"></mat-datepicker-toggle>
|
||||
<mat-datepicker #enddatepicker></mat-datepicker>
|
||||
</mat-form-field>
|
||||
<button #setTenancyEndDataButton type="submit" mat-raised-button color="primary">Enddatum setzen</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<table mat-table [dataSource]="mappedFeesDataSource" #zftable>
|
||||
<ng-container matColumnDef="description">
|
||||
<th mat-header-cell *matHeaderCellDef>Beschreibung</th>
|
||||
<td mat-cell *matCellDef="let element">{{element.rawTenancy.description}}</td>
|
||||
<td mat-cell *matCellDef="let element">{{element.description}}</td>
|
||||
</ng-container>
|
||||
<ng-container matColumnDef="flat">
|
||||
<th mat-header-cell *matHeaderCellDef>Wohnung</th>
|
||||
<td mat-cell *matCellDef="let element">{{element.flat}}</td>
|
||||
<ng-container matColumnDef="amount">
|
||||
<th mat-header-cell *matHeaderCellDef>Betrag</th>
|
||||
<td mat-cell *matCellDef="let element">{{element.amount}} €</td>
|
||||
</ng-container>
|
||||
<ng-container matColumnDef="parking">
|
||||
<th mat-header-cell *matHeaderCellDef>Garage</th>
|
||||
<td mat-cell *matCellDef="let element">{{element.parking}}</td>
|
||||
</ng-container>
|
||||
<ng-container matColumnDef="commercial_premise">
|
||||
<th mat-header-cell *matHeaderCellDef>Büro</th>
|
||||
<td mat-cell *matCellDef="let element">{{element.commercial_premise}}</td>
|
||||
<ng-container matColumnDef="fee_type">
|
||||
<th mat-header-cell *matHeaderCellDef>Typ</th>
|
||||
<td mat-cell *matCellDef="let element">{{element.fee_type}} €</td>
|
||||
</ng-container>
|
||||
<ng-container matColumnDef="startdate">
|
||||
<th mat-header-cell *matHeaderCellDef>Beginn</th>
|
||||
<td mat-cell *matCellDef="let element">{{element.rawTenancy.startdate}}</td>
|
||||
<td mat-cell *matCellDef="let element">{{element.startdate}}</td>
|
||||
</ng-container>
|
||||
<ng-container matColumnDef="enddate">
|
||||
<th mat-header-cell *matHeaderCellDef>Ende</th>
|
||||
<td mat-cell *matCellDef="let element">{{element.rawTenancy.enddate}}</td>
|
||||
<td mat-cell *matCellDef="let element">{{element.enddate}}</td>
|
||||
</ng-container>
|
||||
<tr mat-header-row *matHeaderRowDef="tenancyDisplayColumns"></tr>
|
||||
<tr mat-row *matRowDef="let row; columns: tenancyDisplayColumns;"></tr>
|
||||
<tr mat-header-row *matHeaderRowDef="mappedFeesDisplayedColumns"></tr>
|
||||
<tr mat-row *matRowDef="let row; columns: mappedFeesDisplayedColumns;"></tr>
|
||||
</table>
|
||||
</div>
|
||||
</mat-expansion-panel>
|
||||
</mat-accordion>
|
||||
</mat-card-content>
|
||||
<div>
|
||||
<form (ngSubmit)="addFee()">
|
||||
<mat-form-field appearance="standard" id="addfeefield">
|
||||
<mat-label>Mietsatz</mat-label>
|
||||
<mat-select #mapSelect [(ngModel)]="selectedFee" name="fee">
|
||||
<mat-option *ngFor="let p of allFees" [value]="p.id">{{p.description}} {{p.amount}} {{p.startdate}}</mat-option>
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
<button #mapFeeButton type="submit" mat-raised-button color="primary">Zuordnen</button>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
</mat-card-content>
|
||||
</mat-card>
|
||||
|
||||
</section>
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { Component, OnInit, ViewChild } from '@angular/core';
|
||||
import { ActivatedRoute, Router } from '@angular/router';
|
||||
import { AccountService, CommercialPremiseService, FlatService, ParkingService, PremiseService, TenancyService, TenantService } from '../data-object-service';
|
||||
import { Account, CommercialPremise, Flat, NULL_Account, NULL_CommercialPremise, NULL_Flat, NULL_Parking, NULL_Tenant, Parking, Premise, Tenancy, Tenant } from '../data-objects';
|
||||
import { AccountService, CommercialPremiseService, FeeService, FlatService, ParkingService, PremiseService, TenancyFeeMappingService, TenancyService, TenantService } from '../data-object-service';
|
||||
import { Account, CommercialPremise, Fee, Flat, NULL_Account, NULL_CommercialPremise, NULL_Flat, NULL_Parking, NULL_Tenancy, NULL_Tenant, Parking, Premise, Tenancy, TenancyFeeMapping, Tenant } from '../data-objects';
|
||||
import { MessageService } from '../message.service';
|
||||
import { MatButton } from '@angular/material/button';
|
||||
import { MatTableDataSource } from '@angular/material/table';
|
||||
import { ExtApiService } from '../ext-data-object-service';
|
||||
|
||||
|
||||
interface DN_Tenancy {
|
||||
@ -25,14 +26,23 @@ export class TenantDetailsComponent implements OnInit {
|
||||
|
||||
account: Account = NULL_Account
|
||||
|
||||
tenancies: DN_Tenancy[] = []
|
||||
tenancies: DN_Tenancy[]
|
||||
tenancyDataSource: MatTableDataSource<DN_Tenancy>
|
||||
tenancyDisplayColumns: string[] = [ "description", "flat", "parking", "commercial_premise", "startdate", "enddate" ]
|
||||
|
||||
collapseTenantDetails: boolean = false
|
||||
collapseTenancies: boolean = false
|
||||
|
||||
selectedTenancy: Tenancy = undefined
|
||||
mappedFees: Fee[]
|
||||
mappedFeesDataSource: MatTableDataSource<Fee>
|
||||
mappedFeesDisplayedColumns: string[] = [ "description", "amount", "fee_type", "startdate", "enddate" ]
|
||||
allFees: Fee[]
|
||||
selectedFee: number
|
||||
|
||||
|
||||
@ViewChild('submitButton') submitButton: MatButton
|
||||
@ViewChild('mapFeeButton') mapFeeButton: MatButton
|
||||
|
||||
constructor(
|
||||
private tenantService: TenantService,
|
||||
@ -41,6 +51,9 @@ export class TenantDetailsComponent implements OnInit {
|
||||
private flatService: FlatService,
|
||||
private parkingService: ParkingService,
|
||||
private commercialPremiseService: CommercialPremiseService,
|
||||
private tenancyFeeMappingService: TenancyFeeMappingService,
|
||||
private feeService: FeeService,
|
||||
private extApiService: ExtApiService,
|
||||
private premiseService: PremiseService,
|
||||
private messageService: MessageService,
|
||||
private route: ActivatedRoute,
|
||||
@ -53,31 +66,39 @@ export class TenantDetailsComponent implements OnInit {
|
||||
if (id != 0) {
|
||||
this.tenant = await this.tenantService.getTenant(id)
|
||||
this.account = await this.accountService.getAccount(this.tenant.account)
|
||||
|
||||
const premises: Premise[] = await this.premiseService.getPremises()
|
||||
const premisesDict = new Map<number, Premise>()
|
||||
for (let p of premises) {
|
||||
premisesDict.set(p.id, p)
|
||||
}
|
||||
for (let t of await this.tenancyService.getTenancysByTenant(this.tenant.id)) {
|
||||
const flat: Flat = (t.flat) ? await this.flatService.getFlat(t.flat) : NULL_Flat
|
||||
const parking: Parking = (t.parking) ? await this.parkingService.getParking(t.parking) : NULL_Parking
|
||||
const commercialPremise: CommercialPremise = (t.commercial_premise) ? await this.commercialPremiseService.getCommercialPremise(t.commercial_premise) : NULL_CommercialPremise
|
||||
this.tenancies.push({
|
||||
rawTenancy: t,
|
||||
flat: (flat != NULL_Flat) ? `${flat.description} (${premisesDict.get(flat.premise).description})` : '',
|
||||
parking: (parking != NULL_Parking) ? `${parking.description} (${premisesDict.get(parking.premise).description})` : '',
|
||||
commercialPremise: (commercialPremise != NULL_CommercialPremise) ? `${commercialPremise.description} (${premisesDict.get(commercialPremise.premise).description})` : ''
|
||||
})
|
||||
}
|
||||
this.tenancyDataSource = new MatTableDataSource<DN_Tenancy>(this.tenancies)
|
||||
this.getTenancies()
|
||||
}
|
||||
} catch (err) {
|
||||
this.messageService.add(JSON.stringify(err, undefined, 4))
|
||||
}
|
||||
}
|
||||
|
||||
async saveTenant() {
|
||||
async getTenancies(): Promise<void> {
|
||||
try {
|
||||
this.tenancies = []
|
||||
const premises: Premise[] = await this.premiseService.getPremises()
|
||||
const premisesDict = new Map<number, Premise>()
|
||||
for (let p of premises) {
|
||||
premisesDict.set(p.id, p)
|
||||
}
|
||||
for (let t of await this.tenancyService.getTenancysByTenant(this.tenant.id)) {
|
||||
const flat: Flat = (t.flat) ? await this.flatService.getFlat(t.flat) : NULL_Flat
|
||||
const parking: Parking = (t.parking) ? await this.parkingService.getParking(t.parking) : NULL_Parking
|
||||
const commercialPremise: CommercialPremise = (t.commercial_premise) ? await this.commercialPremiseService.getCommercialPremise(t.commercial_premise) : NULL_CommercialPremise
|
||||
this.tenancies.push({
|
||||
rawTenancy: t,
|
||||
flat: (flat != NULL_Flat) ? `${flat.description} (${premisesDict.get(flat.premise).description})` : '',
|
||||
parking: (parking != NULL_Parking) ? `${parking.description} (${premisesDict.get(parking.premise).description})` : '',
|
||||
commercialPremise: (commercialPremise != NULL_CommercialPremise) ? `${commercialPremise.description} (${premisesDict.get(commercialPremise.premise).description})` : ''
|
||||
})
|
||||
}
|
||||
this.tenancyDataSource = new MatTableDataSource<DN_Tenancy>(this.tenancies)
|
||||
} catch (err) {
|
||||
this.messageService.add(JSON.stringify(err, undefined, 4))
|
||||
}
|
||||
}
|
||||
|
||||
async saveTenant(): Promise<void> {
|
||||
try {
|
||||
this.submitButton.disabled = true
|
||||
this.messageService.add("saveTenant")
|
||||
@ -103,8 +124,54 @@ export class TenantDetailsComponent implements OnInit {
|
||||
}
|
||||
}
|
||||
|
||||
async setSelectedTenancy(selectedTenancy: Tenancy): Promise<void> {
|
||||
this.selectedTenancy = selectedTenancy
|
||||
this.getMappedFees()
|
||||
}
|
||||
|
||||
async getMappedFees(): Promise<void> {
|
||||
this.mappedFees = await this.extApiService.getFeeByTenancies(this.selectedTenancy.id)
|
||||
this.messageService.add(`setSelectedTenancy: mappedFees: ${JSON.stringify(this.mappedFees, undefined, 4)}`)
|
||||
this.mappedFeesDataSource = new MatTableDataSource<Fee>(this.mappedFees)
|
||||
this.messageService.add("mappedFeesDataSource set")
|
||||
}
|
||||
|
||||
clearSelectedTenancy(): void {
|
||||
this.selectedTenancy = undefined
|
||||
}
|
||||
|
||||
|
||||
async getFees(): Promise<void> {
|
||||
try {
|
||||
this.messageService.add("Trying to load fees")
|
||||
this.allFees = await this.feeService.getFees()
|
||||
this.messageService.add("fees loaded")
|
||||
} catch (err) {
|
||||
this.messageService.add(JSON.stringify(err, undefined, 4))
|
||||
}
|
||||
}
|
||||
|
||||
async addFee() {
|
||||
try {
|
||||
this.mapFeeButton.disabled = true
|
||||
this.messageService.add(`fee: ${ JSON.stringify(this.selectedFee, undefined, 4) }`)
|
||||
let newMapping: TenancyFeeMapping = {
|
||||
'tenancy': this.selectedTenancy.id,
|
||||
'fee': this.selectedFee,
|
||||
'id': 0
|
||||
}
|
||||
newMapping = await this.tenancyFeeMappingService.postTenancyFeeMapping(newMapping)
|
||||
this.messageService.add(`New fee tenancy mapping created: ${newMapping.id}`)
|
||||
this.selectedFee = undefined
|
||||
this.getMappedFees()
|
||||
} finally {
|
||||
this.mapFeeButton.disabled = false
|
||||
}
|
||||
}
|
||||
|
||||
ngOnInit(): void {
|
||||
this.getTenant()
|
||||
this.getFees()
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user