From 3fc5586803b04279f896a69a26bf341726f718ac Mon Sep 17 00:00:00 2001 From: Johann Date: Fri, 3 Jul 2020 06:37:49 +0200 Subject: [PATCH] feat(properties): Add additional properties (#46) --- src/classes/portals/Estate.ts | 2 ++ src/classes/portals/FlowFact/v1/Estate.ts | 2 ++ src/classes/portals/FlowFact/v2/Estate.ts | 13 ++++++++++++- src/classes/portals/Immobilienscout24/Estate.ts | 13 ++++++++++++- src/lib/get-keys.ts | 2 ++ src/translations/de.ts | 3 ++- 6 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/classes/portals/Estate.ts b/src/classes/portals/Estate.ts index 825394b..e71827a 100644 --- a/src/classes/portals/Estate.ts +++ b/src/classes/portals/Estate.ts @@ -85,6 +85,8 @@ export interface RealEstateDetailedProperties { residentialUnits: number; summerResidencePractical: boolean; usableFloorSpace: number; + totalRent: string | undefined; + serviceCharge: string | undefined; } export interface Attachment { diff --git a/src/classes/portals/FlowFact/v1/Estate.ts b/src/classes/portals/FlowFact/v1/Estate.ts index 7f0a1cf..6afb6be 100644 --- a/src/classes/portals/FlowFact/v1/Estate.ts +++ b/src/classes/portals/FlowFact/v1/Estate.ts @@ -76,6 +76,8 @@ export class FlowFactEstateV1 extends Estate { residentialUnits: this.getValue('residentialUnits'), summerResidencePractical: this.getValue('summerResidencePractical'), usableFloorSpace: this.getValue('usableFloorSpace'), + totalRent: undefined, + serviceCharge: undefined, }; } diff --git a/src/classes/portals/FlowFact/v2/Estate.ts b/src/classes/portals/FlowFact/v2/Estate.ts index 488377f..b9daaea 100644 --- a/src/classes/portals/FlowFact/v2/Estate.ts +++ b/src/classes/portals/FlowFact/v2/Estate.ts @@ -81,6 +81,8 @@ export class FlowFactEstateV2 extends Estate { title: this.getTranslatableValue('headline.values[0]'), previewImage: this.getPreviewImage(), updatedAt: this.getDate('_metadata.timestamp'), + totalRent: this.getMonetaryValue('rentinclusiveofheating.values[0]'), + serviceCharge: this.getMonetaryValue('additionalexpenses.values[0]'), }; } @@ -108,10 +110,19 @@ export class FlowFactEstateV2 extends Estate { if (!price && !rent) return; return { value: price || rent, - currency: this.getTranslatableValue('currency.values[0]', '€'), + currency: this.getCurrency(), }; } + private getMonetaryValue(path: any): string | undefined { + const value = this.getValue(path); + if (value) return `${value} ${this.getCurrency()}`; + } + + private getCurrency(): string { + return this.getTranslatableValue('currency.values[0]', '€'); + } + private getAddress(): Address { return { city: this.getValue('addresses.values[0].city'), diff --git a/src/classes/portals/Immobilienscout24/Estate.ts b/src/classes/portals/Immobilienscout24/Estate.ts index 8792ce0..eccf8e8 100644 --- a/src/classes/portals/Immobilienscout24/Estate.ts +++ b/src/classes/portals/Immobilienscout24/Estate.ts @@ -87,6 +87,8 @@ export class Immobilienscout24Estate extends Estate { '@modified', '@modification', ]), + totalRent: this.getMonetaryValue('totalRent'), + serviceCharge: this.getMonetaryValue('serviceCharge'), }; } @@ -119,7 +121,7 @@ export class Immobilienscout24Estate extends Estate { const rent = this.getValue('baseRent'); if (!price && !rent) return; - const currency = this.getTranslatableValue('price.currency', '€'); + const currency = this.getCurrency(); const priceIntervalType = this.getTranslatableValue('price.intervalType'); return { value: price || rent, @@ -128,6 +130,15 @@ export class Immobilienscout24Estate extends Estate { }; } + private getMonetaryValue(path: any): string | undefined { + const value = this.getValue(path); + if (value) return `${value} ${this.getCurrency()}`; + } + + private getCurrency(): string { + return this.getTranslatableValue('price.currency', '€'); + } + private getAddress(): Address | undefined { return { city: this.getValue('address.city'), diff --git a/src/lib/get-keys.ts b/src/lib/get-keys.ts index 32dd584..b09b247 100644 --- a/src/lib/get-keys.ts +++ b/src/lib/get-keys.ts @@ -65,6 +65,8 @@ class Detailed implements RealEstateDetailedProperties { residentialUnits!: number; summerResidencePractical!: boolean; usableFloorSpace!: number; + totalRent!: string; + serviceCharge!: string; } class Ad implements Address { diff --git a/src/translations/de.ts b/src/translations/de.ts index 4d43125..68958be 100644 --- a/src/translations/de.ts +++ b/src/translations/de.ts @@ -1178,7 +1178,8 @@ export default { rent_and_buy: 'Miete und Kauf', rent_per_month: 'Miete pro Monat', rent_per_sqm: 'Miete pro Quadratmeter', - rent: 'Miete', + rent: 'Kaltmiete', + totalrent: 'Warmmiete', rentalincome: 'Mieteinnahmen pro Monat', rentalincomeactual: 'Mieteinahmen aktuell', rentalincometarget: 'Mögliche Mieteinahmen',