Merge remote-tracking branch 'origin/UMBE' into UMBE
This commit is contained in:
@@ -2,9 +2,9 @@
|
|||||||
import HelpLabel from "../HelpLabel.svelte";
|
import HelpLabel from "../HelpLabel.svelte";
|
||||||
import moment from "moment";
|
import moment from "moment";
|
||||||
import Label from "../Label.svelte";
|
import Label from "../Label.svelte";
|
||||||
import fuelList from "./brennstoffListe";
|
import fuelList from "./brennstoffListe.js";
|
||||||
import { auditVerbrauchAbweichung } from "../Verbrauchsausweis/audits/VerbrauchAbweichung";
|
import { auditVerbrauchAbweichung } from "../Verbrauchsausweis/audits/VerbrauchAbweichung.js";
|
||||||
import { GebaeudeAufnahmeClient, GebaeudeClient, VerbrauchsausweisWohnenClient } from "./types";
|
import { GebaeudeAufnahmeClient, GebaeudeClient, VerbrauchsausweisWohnenClient } from "./types.js";
|
||||||
|
|
||||||
export let gebaeude: GebaeudeClient;
|
export let gebaeude: GebaeudeClient;
|
||||||
export let gebaeude_aufnahme_allgemein: GebaeudeAufnahmeClient;
|
export let gebaeude_aufnahme_allgemein: GebaeudeAufnahmeClient;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { GebaeudeAufnahmeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types";
|
import { GebaeudeAufnahmeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
|
||||||
|
|
||||||
export function auditBedarfsausweisBenoetigt(ausweis: VerbrauchsausweisWohnenClient, gebaeude: GebaeudeAufnahmeClient): boolean {
|
export function auditBedarfsausweisBenoetigt(ausweis: VerbrauchsausweisWohnenClient, gebaeude: GebaeudeAufnahmeClient): boolean {
|
||||||
if (ausweis.ausstellgrund == "Neubau" || ausweis.ausstellgrund == "Modernisierung") {
|
if (ausweis.ausstellgrund == "Neubau" || ausweis.ausstellgrund == "Modernisierung") {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { GebaeudeClient, VerbrauchsausweisWohnenClient, GebaeudeAufnahmeClient } from "#components/Ausweis/types";
|
import { GebaeudeClient, VerbrauchsausweisWohnenClient, GebaeudeAufnahmeClient } from "#components/Ausweis/types.js";
|
||||||
import { AuditType, hidden } from "./hidden";
|
import { AuditType, hidden } from "./hidden.js";
|
||||||
import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "#lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016";
|
import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "#lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.js";
|
||||||
import { getKlimafaktoren } from "#lib/Klimafaktoren";
|
import { getKlimafaktoren } from "#lib/Klimafaktoren.js";
|
||||||
|
|
||||||
export async function auditEndEnergie(ausweis: VerbrauchsausweisWohnenClient, gebaeude: GebaeudeClient, gebaeude_aufnahme_allgemein: GebaeudeAufnahmeClient): Promise<boolean> {
|
export async function auditEndEnergie(ausweis: VerbrauchsausweisWohnenClient, gebaeude: GebaeudeClient, gebaeude_aufnahme_allgemein: GebaeudeAufnahmeClient): Promise<boolean> {
|
||||||
if (hidden.has(AuditType.END_ENERGIE)) {
|
if (hidden.has(AuditType.END_ENERGIE)) {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { GebaeudeAufnahmeClient } from "#components/Ausweis/types";
|
import { GebaeudeAufnahmeClient } from "#components/Ausweis/types.js";
|
||||||
import { AuditType, hidden } from "../audits/hidden";
|
import { AuditType, hidden } from "../audits/hidden.js";
|
||||||
|
|
||||||
export function auditHeizungGebaeudeBaujahr(gebaeude: GebaeudeAufnahmeClient): boolean {
|
export function auditHeizungGebaeudeBaujahr(gebaeude: GebaeudeAufnahmeClient): boolean {
|
||||||
if ((gebaeude.baujahr_heizung && gebaeude.baujahr_heizung.length > 0) && (gebaeude.baujahr_gebaeude && gebaeude.baujahr_gebaeude.length > 0)) {
|
if ((gebaeude.baujahr_heizung && gebaeude.baujahr_heizung.length > 0) && (gebaeude.baujahr_gebaeude && gebaeude.baujahr_gebaeude.length > 0)) {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { GebaeudeAufnahmeClient } from "#components/Ausweis/types";
|
import { GebaeudeAufnahmeClient } from "#components/Ausweis/types.js";
|
||||||
import { AuditType, hidden } from "../audits/hidden";
|
import { AuditType, hidden } from "../audits/hidden.js";
|
||||||
|
|
||||||
export function auditHeizungJuengerDreiJahre(gebaeude: GebaeudeAufnahmeClient): boolean {
|
export function auditHeizungJuengerDreiJahre(gebaeude: GebaeudeAufnahmeClient): boolean {
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { GebaeudeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types";
|
import { GebaeudeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
|
||||||
import { AuditType, hidden } from "./hidden";
|
import { AuditType, hidden } from "./hidden.js";
|
||||||
import { getKlimafaktoren } from "#lib/Klimafaktoren";
|
import { getKlimafaktoren } from "#lib/Klimafaktoren.js";
|
||||||
|
|
||||||
export async function auditKlimaFaktoren(ausweis: VerbrauchsausweisWohnenClient, gebaeude: GebaeudeClient): Promise<boolean> {
|
export async function auditKlimaFaktoren(ausweis: VerbrauchsausweisWohnenClient, gebaeude: GebaeudeClient): Promise<boolean> {
|
||||||
if (hidden.has(AuditType.KLIMA_FAKTOREN)) {
|
if (hidden.has(AuditType.KLIMA_FAKTOREN)) {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { GebaeudeAufnahmeClient } from "#components/Ausweis/types";
|
import { GebaeudeAufnahmeClient } from "#components/Ausweis/types.js";
|
||||||
import { AuditType, hidden } from "./hidden";
|
import { AuditType, hidden } from "./hidden.js";
|
||||||
|
|
||||||
export function auditLeerStand(gebaeude: GebaeudeAufnahmeClient): boolean {
|
export function auditLeerStand(gebaeude: GebaeudeAufnahmeClient): boolean {
|
||||||
if (gebaeude.leerstand && !hidden.has(AuditType.LEER_STAND)) {
|
if (gebaeude.leerstand && !hidden.has(AuditType.LEER_STAND)) {
|
||||||
|
|||||||
@@ -1,23 +1,29 @@
|
|||||||
import { GebaeudeAufnahmeClient } from "#components/Ausweis/types";
|
import { GebaeudeAufnahmeClient } from "#components/Ausweis/types.js";
|
||||||
import { client } from "src/trpc";
|
import { client } from "src/trpc.js";
|
||||||
import { memoize } from "src/lib/Memoization";
|
import { memoize } from "src/lib/Memoization.js";
|
||||||
import { AuditType, hidden } from "../audits/hidden";
|
import { AuditType, hidden } from "../audits/hidden.js";
|
||||||
|
|
||||||
export const auditPlzNichtErkannt = memoize(async (gebaeude: GebaeudeAufnahmeClient) => {
|
export const auditPlzNichtErkannt = memoize(
|
||||||
if (gebaeude.plz) {
|
async (gebaeude: GebaeudeAufnahmeClient) => {
|
||||||
if (gebaeude.plz.length == 5) {
|
if (gebaeude.plz) {
|
||||||
try {
|
if (gebaeude.plz.length == 5) {
|
||||||
const result = await client.v1.postleitzahlen.query({ plz: gebaeude.plz, limit: 1 });
|
try {
|
||||||
|
const result = await client.v1.postleitzahlen.query({
|
||||||
if (result.length > 0) {
|
plz: gebaeude.plz,
|
||||||
return false;
|
limit: 1,
|
||||||
}
|
});
|
||||||
} catch (e) {
|
|
||||||
if (!hidden.has(AuditType.PLZ_NICHT_ERKANNT)){
|
if (result.length > 0) {
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
} catch (e) {
|
||||||
}
|
if (!hidden.has(AuditType.PLZ_NICHT_ERKANNT)) {
|
||||||
}
|
return true;
|
||||||
return false
|
}
|
||||||
});
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { GebaeudeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types";
|
import { GebaeudeAufnahmeClient, GebaeudeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
|
||||||
import { AuditType, hidden } from "./hidden";
|
import { AuditType, hidden } from "./hidden.js";
|
||||||
|
|
||||||
export function auditVerbrauchAbweichung(ausweis: VerbrauchsausweisWohnenClient, gebaeude: GebaeudeClient): number[] {
|
export function auditVerbrauchAbweichung(ausweis: VerbrauchsausweisWohnenClient, gebaeude: GebaeudeAufnahmeClient): number[] {
|
||||||
if (gebaeude.leerstand && (gebaeude.leerstand > 0)) {
|
if (gebaeude.leerstand && (gebaeude.leerstand > 0)) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { VerbrauchsausweisWohnenClient } from "#components/Ausweis/types";
|
import { VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
|
||||||
import { AuditType, hidden } from "./hidden";
|
import { AuditType, hidden } from "./hidden.js";
|
||||||
|
|
||||||
export function auditWarmWasser(ausweis: VerbrauchsausweisWohnenClient): boolean {
|
export function auditWarmWasser(ausweis: VerbrauchsausweisWohnenClient): boolean {
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { GebaeudeAufnahmeClient } from "#components/Ausweis/types";
|
import { GebaeudeAufnahmeClient } from "#components/Ausweis/types.js";
|
||||||
import { AuditType, hidden } from "./hidden";
|
import { AuditType, hidden } from "./hidden.js";
|
||||||
|
|
||||||
export function auditWohnFlaeche(gebaeude: GebaeudeAufnahmeClient ): boolean {
|
export function auditWohnFlaeche(gebaeude: GebaeudeAufnahmeClient ): boolean {
|
||||||
if (gebaeude.einheiten && gebaeude.flaeche ) {
|
if (gebaeude.einheiten && gebaeude.flaeche ) {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { GebaeudeAufnahmeClient } from "#components/Ausweis/types";
|
import { GebaeudeAufnahmeClient } from "#components/Ausweis/types.js";
|
||||||
import { AuditType, hidden } from "../audits/hidden";
|
import { AuditType, hidden } from "../audits/hidden.js";
|
||||||
|
|
||||||
export function auditWohnflaecheGroesserGesamtflaeche(gebaeude: GebaeudeAufnahmeClient ): boolean {
|
export function auditWohnflaecheGroesserGesamtflaeche(gebaeude: GebaeudeAufnahmeClient ): boolean {
|
||||||
if (gebaeude.flaeche && gebaeude.nutzflaeche){
|
if (gebaeude.flaeche && gebaeude.nutzflaeche){
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { GebaeudeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types";
|
import { GebaeudeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
|
||||||
import { AuditType, hidden } from "./hidden";
|
import { AuditType, hidden } from "./hidden.js";
|
||||||
|
|
||||||
export function auditZeitraumAktuell(ausweis: VerbrauchsausweisWohnenClient, gebaeude: GebaeudeClient): boolean {
|
export function auditZeitraumAktuell(ausweis: VerbrauchsausweisWohnenClient, gebaeude: GebaeudeClient): boolean {
|
||||||
if (hidden.has(AuditType.ZEITRAUM_AKTUELL)) {
|
if (hidden.has(AuditType.ZEITRAUM_AKTUELL)) {
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ export enum AuditType {
|
|||||||
WOHN_FLAECHE,
|
WOHN_FLAECHE,
|
||||||
WARM_WASSER,
|
WARM_WASSER,
|
||||||
LEER_STAND,
|
LEER_STAND,
|
||||||
PLZ_NICHT_ERKANNT,
|
|
||||||
END_ENERGIE,
|
END_ENERGIE,
|
||||||
WOHNFLAECHE_GROESSER_GESAMTFLAECHE
|
WOHNFLAECHE_GROESSER_GESAMTFLAECHE
|
||||||
}
|
}
|
||||||
@@ -8,8 +8,5 @@ import Preistabelle from "#sidebarCards/card-price-info.svelte";
|
|||||||
|
|
||||||
|
|
||||||
<Navigation client:load />
|
<Navigation client:load />
|
||||||
|
|
||||||
<Preistabelle client:load />
|
<Preistabelle client:load />
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
---
|
---
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
|
|
||||||
import "../style/global.scss";
|
import "#style/global.css";
|
||||||
import "../../svelte-dialogs.config"
|
import "../../svelte-dialogs.config"
|
||||||
import "svelte-ripple-action/ripple.css"
|
import "svelte-ripple-action/ripple.css"
|
||||||
import ThemeController from "#components/ThemeController.svelte";
|
import ThemeController from "#components/ThemeController.svelte";
|
||||||
@@ -38,7 +38,7 @@ const schema = JSON.stringify({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const lightTheme = Astro.cookies.get("theme").value === "light";
|
const lightTheme = Astro.cookies.get("theme")?.value === "light";
|
||||||
---
|
---
|
||||||
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
|
|
||||||
import "../style/UMBE_global.css";
|
import "../style/UMBE_global.css";
|
||||||
import "../style/global.scss";
|
import "#style/global.css";
|
||||||
import "../../svelte-dialogs.config"
|
import "../../svelte-dialogs.config"
|
||||||
import Footer from "../components/Footer.astro";
|
import Footer from "../components/Footer.astro";
|
||||||
import Header from "../components/Header.astro";
|
import Header from "../components/Header.astro";
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
---
|
---
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
|
|
||||||
import "../style/global.scss";
|
import "#style/global.css";
|
||||||
import "../../svelte-dialogs.config"
|
import "../../svelte-dialogs.config"
|
||||||
import "svelte-ripple-action/ripple.css"
|
import "svelte-ripple-action/ripple.css"
|
||||||
import DashboardSidebar from "../components/Dashboard/DashboardSidebar.svelte"
|
import DashboardSidebar from "../components/Dashboard/DashboardSidebar.svelte"
|
||||||
@@ -50,7 +50,7 @@ const schema = JSON.stringify({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
let lightTheme = Astro.cookies.get("theme").value === "light";
|
let lightTheme = Astro.cookies.get("theme")?.value === "light";
|
||||||
---
|
---
|
||||||
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { VerbrauchsausweisWohnenClient } from "#components/Ausweis/types";
|
import { VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
|
||||||
import { getKlimafaktoren } from "#lib/Klimafaktoren";
|
import { getKlimafaktoren } from "#lib/Klimafaktoren.js";
|
||||||
import { getHeizwertfaktor } from "#lib/server/Heizwertfaktor";
|
import { getHeizwertfaktor } from "#lib/server/Heizwertfaktor.js";
|
||||||
import { Enums } from "@ibcornelsen/database/client";
|
import { Enums } from "@ibcornelsen/database/client";
|
||||||
import moment from "moment";
|
import moment from "moment";
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,12 @@
|
|||||||
import type { GebaeudeStammdaten, VerbrauchsausweisWohnen } from "@ibcornelsen/database/client";
|
import type { GebaeudeStammdaten, VerbrauchsausweisWohnen } from "@ibcornelsen/database/client";
|
||||||
import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "./VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016";
|
import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "./VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.js";
|
||||||
|
|
||||||
export async function endEnergieVerbrauch(ausweis: VerbrauchsausweisWohnen & { gebaeude_stammdaten: GebaeudeStammdaten }): Promise<number> {
|
export async function endEnergieVerbrauch(ausweis: VerbrauchsausweisWohnen & { gebaeude_stammdaten: GebaeudeStammdaten }): Promise<number> {
|
||||||
return (await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis)).endEnergieVerbrauchGesamt;
|
const result = await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis);
|
||||||
|
|
||||||
|
if (!result) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result.endEnergieVerbrauchGesamt;
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import moment from "moment";
|
import moment from "moment";
|
||||||
import { memoize } from "./Memoization";
|
import { memoize } from "./Memoization.js";
|
||||||
import { client } from "src/trpc";
|
import { client } from "src/trpc.js";
|
||||||
|
|
||||||
export const getKlimafaktoren = memoize(async (date: Date, plz: string) => {
|
export const getKlimafaktoren = memoize(async (date: Date, plz: string) => {
|
||||||
if (!plz || !date) {
|
if (!plz || !date) {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import fuelList from "#components/Ausweis/brennstoffListe";
|
import fuelList from "#components/Ausweis/brennstoffListe.js";
|
||||||
|
|
||||||
export const getHeizwertfaktor = function(energietraeger: string, einheit: string): {
|
export const getHeizwertfaktor = function(energietraeger: string, einheit: string): {
|
||||||
coe: number,
|
coe: number,
|
||||||
|
|||||||
@@ -619,11 +619,7 @@
|
|||||||
message: "Plausibilitätsprüfung",
|
message: "Plausibilitätsprüfung",
|
||||||
timeout: 0,
|
timeout: 0,
|
||||||
uid: "PLZ_NICHT_ERKANNT",
|
uid: "PLZ_NICHT_ERKANNT",
|
||||||
dismissable: true,
|
dismissable: false,
|
||||||
onUserDismiss: () => {
|
|
||||||
hidden.add(AuditType.PLZ_NICHT_ERKANNT);
|
|
||||||
gebaeude = gebaeude;
|
|
||||||
},
|
|
||||||
type: "warning",
|
type: "warning",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
@@ -639,7 +635,7 @@
|
|||||||
notification={{
|
notification={{
|
||||||
message: "Plausibilitätsprüfung",
|
message: "Plausibilitätsprüfung",
|
||||||
timeout: 0,
|
timeout: 0,
|
||||||
uid: "HEIZUNG_VOR_GEBAEUDE",
|
uid: "HEIZUNG_GEBAEUDE_BAUJAHR",
|
||||||
dismissable: true,
|
dismissable: true,
|
||||||
onUserDismiss: () => {
|
onUserDismiss: () => {
|
||||||
hidden.add(AuditType.HEIZUNG_GEBAEUDE_BAUJAHR);
|
hidden.add(AuditType.HEIZUNG_GEBAEUDE_BAUJAHR);
|
||||||
@@ -782,7 +778,7 @@
|
|||||||
</RawNotification>
|
</RawNotification>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
{#if auditVerbrauchAbweichung(ausweis, gebaeude).length > 0}
|
{#if auditVerbrauchAbweichung(ausweis, gebaeude_aufnahme_allgemein).length > 0}
|
||||||
<RawNotification
|
<RawNotification
|
||||||
notification={{
|
notification={{
|
||||||
message: "Plausibilitätsprüfung",
|
message: "Plausibilitätsprüfung",
|
||||||
@@ -798,8 +794,8 @@
|
|||||||
>
|
>
|
||||||
Die Abweichung der Verbräuche zwischen Zeitraum {auditVerbrauchAbweichung(
|
Die Abweichung der Verbräuche zwischen Zeitraum {auditVerbrauchAbweichung(
|
||||||
ausweis,
|
ausweis,
|
||||||
gebaeude,
|
gebaeude_aufnahme_allgemein,
|
||||||
)[0]} und {auditVerbrauchAbweichung(ausweis, gebaeude)[1]} beträgt mehr
|
)[0]} und {auditVerbrauchAbweichung(ausweis, gebaeude_aufnahme_allgemein)[1]} beträgt mehr
|
||||||
als 30% und sie haben keinen Leerstand angegeben. Sind sie sich sicher,
|
als 30% und sie haben keinen Leerstand angegeben. Sind sie sich sicher,
|
||||||
dass das stimmt?
|
dass das stimmt?
|
||||||
</RawNotification>
|
</RawNotification>
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
import ThemeController from "../components/ThemeController.svelte";
|
import ThemeController from "../components/ThemeController.svelte";
|
||||||
import moment from "moment"
|
import moment from "moment"
|
||||||
|
|
||||||
const lightTheme = Astro.cookies.get("theme").value === "light";
|
const lightTheme = Astro.cookies.get("theme")?.value === "light";
|
||||||
---
|
---
|
||||||
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
|
|||||||
@@ -6,11 +6,7 @@ import BannerPrice from "#content/banner-saeule.svelte";
|
|||||||
|
|
||||||
<Layout title="Energieausweis online erstellen - Online Energieausweis">
|
<Layout title="Energieausweis online erstellen - Online Energieausweis">
|
||||||
<h1>Energieausweis online erstellen</h1>
|
<h1>Energieausweis online erstellen</h1>
|
||||||
|
|
||||||
<BannerPrice client:load />
|
<BannerPrice client:load />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</Layout>
|
</Layout>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user