{{ c.objects?.name || 'Objekt' }}
{{ c.objects?.address }}
{{ c.job_category==='Sonstiges' ? c.job_category_custom || 'Sonstiges' : c.job_category || 'Reinigung' }}
{{ unitSummary(c.unit_numbers) }}

Lädt …

Ihr Zugang zu Einsätzen, Objekten und Dokumenten. Alles an einem Ort – mit der Sorgfalt, die Fischer ausmacht.

Willkommen! Bitte legen Sie Ihr persönliches Passwort fest, um sich künftig einloggen zu können.

Ihr Zugang zu Einsätzen, Objekten und Dokumenten. Alles an einem Ort – mit der Sorgfalt, die Fischer ausmacht.

{{ authLinkError }}
Bitte beim Boss eine neue Einladung anfordern.
config.js und trage deine Supabase-URL und deinen anon-Key ein (siehe SETUP.md, Schritt 3).

Lade dein Profil …
{{ staffTab === 'jobs' ? `${todayJobs.length} Einsätze heute` : `${upcomingJobs.length} kommende Einsätze` }}
{{ myOpenTasksCount }} offen, davon {{ overdueTasksCount }} überfällig
{{ t.description.slice(0, 200) }}…
{{ unitSummary(selectedJob.unit_numbers) }}
{{ selectedJob.objects.address }}
{{ formatDate(today) }}
Klick eine Zeile zum Bearbeiten oder Verschieben.
Abrechnungsstatus konnte nicht geladen werden: {{ executionSummaryError }}
Aufträge per Drag & Drop verschieben. Klick auf einen Auftrag zum Bearbeiten. Farben markieren die Mitarbeiter.
{{ filteredCleaningsList.length }} von {{ cleanings.length }} Aufträgen · Filter gelten für Liste und Kalender.
| Datum | Objekt | Mitarbeiter | Dauer | Aufgaben | Leistungskosten | Einsatz | Abrechnung |
|---|---|---|---|---|---|---|---|
| {{ formatDate(historyDate(c)) }}bis {{formatDate(c.window_end_date)}} |
{{ c.objects?.name || '—' }}{{ c.objects?.address || '' }}
{{ unitSummary(c.unit_numbers) }}
{{ c.job_category === 'Reinigung' ? '🧹' : c.job_category === 'Gartenarbeit' ? '🌿' : c.job_category === 'Reparatur' ? '🔧' : c.job_category === 'Kontrolle' ? '👁' : '📝' }}
{{ c.job_category === 'Sonstiges' && c.job_category_custom ? c.job_category_custom : c.job_category }}
|
{{ cleaningStaffName(c) }} | {{ executionDuration(c) }}{{ cleaningWorkLabel(c) }} | {{ c.task_progress || '—' }} | {{ executionCostLabel(c) }}€ {{ formatMoney(c._cost.gross) }} brutto ({{ c._cost.vat_rate }} % USt)Gesamte Rechnung {{ c._cost.invoice.reference }}: € {{ formatMoney(c._cost.invoice.gross) }} brutto · bezahlt: € {{ formatMoney(c._cost.invoice.paid || 0) }}Leistungen anzeigen{{ line.activity || 'Leistung' }} {{ line.description }} {{ line.kind === 'material' ? 'Material' : line.flat ? 'Pauschale' : line.minutes+' Min · '+(line.hourly_rate==null ? 'Stundensatz fehlt' : '€ '+formatMoney(line.hourly_rate)+' / Std') }} {{ line.net==null ? 'Preis noch offen' : '€ '+formatMoney(line.net)+' netto' }} |
{{ statusLabel(c.status) }}{{ executionCaptureLabel(c) }} | {{ billingLabel(c) }}{{ c._summary.invoice_reference }} |
| Keine Aufträge für diese Filterauswahl. |
Klick auf eine Meldung um Details, Antworten und Status zu bearbeiten.
Klick auf eine Meldung um Details zu sehen oder wieder zu öffnen.
Klick auf eine Anfrage für Details, Antworten und Auftrag daraus erzeugen.
{{ r.description }}
Klick auf eine Anfrage um Details zu sehen oder zu bearbeiten.
Erst deine ausdrückliche Freigabe übernimmt beantragte Änderungen ins System.
{{ objectChangesError }}
Keine offenen Objektanfragen.
{{ r.companies?.name }} · {{ r.proposed.name || r.previous?.name }} · {{ objectChangeStatus(r.status) }} · {{ r.response }}
Klick eine Zeile, um Stammdaten, Checkliste und Einsatz-Historie zu sehen.
| Objekt | Verwaltung | Einheiten | Status |
|---|---|---|---|
{{ o.name }}{{ o.address }} |
{{ o.companies?.name || '—' }} | {{ o.units || '—' }} | {{ o.active ? 'Aktiv' : 'Inaktiv' }} |
Jeder kann unverbindlich eine Kostenschätzung anfordern — ohne Login, nur mit Mailadresse.
Kalkulator-Seite öffnenLink für deine Website: https://www.hausbetreuung-fischer.at/#kalkulator
Anmerkung: {{ i.notes }}
{{ t.description.slice(0, 200) }}…
Exakte Arbeitszeiten je Einsatz, einschließlich historischer Mitarbeiter ohne Cockpit-Zugang. Die Datums- und Mitarbeiterfilter unten gelten auch hier.
{{ workRecordsError }}
| Datum | Kunde / Objekt | Mitarbeiter | Tätigkeit | Von – Bis | Arbeitszeit |
|---|---|---|---|---|---|
| {{ formatDate(t.entry_date) }} | {{ t.objects?.companies?.name }} {{ t.objects?.name || '—' }} |
{{ t.staff_name || t.profiles?.full_name || '—' }} | {{ t.activity }} | {{ t.start_time?.slice(0,5) || '—' }} – {{ t.end_time?.slice(0,5) || '—' }} | {{ formatDuration(Number(t.duration_minutes || 0) * 60) }} |
Keine dokumentierten Einzelzeiten für diese Auswahl.
Summe: {{ formatDuration(filteredRecordedTimes.reduce((n,t) => n + Number(t.duration_minutes || 0) * 60, 0)) }}
| Datum | Mitarbeiter | Typ | Start | Ende | Dauer | Pause | Stopps | GPS | |
|---|---|---|---|---|---|---|---|---|---|
| {{ formatDate(s.started_at) }} | {{ s.staff_name }} | {{ sessionTypeLabel(s.type) }} | {{ time(s.started_at) }} | {{ s.ended_at ? time(s.ended_at) : '— läuft' }} | {{ formatDuration(s.duration_seconds - s.break_seconds) }} | {{ formatDuration(s.break_seconds) }} | — | {{ s.waypoint_count }} | 📍 {{ formatDistance(s.total_distance_m) }} — |
Klick eine Zeile zum Bearbeiten. Die Mailadresse wird für den Rechnungs-Versand verwendet.
| Name | Ansprechpartner | Telefon | UID | Objekte | |
|---|---|---|---|---|---|
| {{ c.name }} | {{ c.contact_name || '—' }} | {{ c.contact_email }} fehlt | {{ c.contact_phone || '—' }} | {{ c.uid_number || '—' }} | {{ objects.filter(o => o.company_id === c.id).length }} |
| Kein Kunde für „{{ searchCompanies }}" gefunden. | |||||
| Noch keine Kunden angelegt. | |||||
Klick eine Zeile zum Bearbeiten (Name, Rolle, Telefon, aktiv/inaktiv).
Kundenzugänge sehen die Objekte ihrer zugeordneten Verwaltung. Sie müssen nicht als Mitarbeiter angelegt werden.
| Name | Rolle | Telefon | Status | |
|---|---|---|---|---|
| {{ p.full_name }} | {{ p.email || '—' }} | {{ roleLabel(p.role) }} | {{ p.phone || '—' }} | {{ p.active ? 'Aktiv' : 'Inaktiv' }} |
Wiederherstellen aktiviert das bestehende Konto mit seiner bisherigen Rolle und Verwaltung. Es wird keine Einladung versendet.
Keine gelöschten Zugänge.
| Name / E-Mail | Rolle | Verwaltung | |
|---|---|---|---|
| {{ p.full_name }} {{ p.email || '—' }} |
{{ roleLabel(p.role) }} | {{ companies.find(c => c.id === p.company_id)?.name || (p.company_id ? 'Verwaltung nicht verfügbar' : '—') }} |
{{ restoreCandidate.email }} · {{ roleLabel(restoreCandidate.role) }} · {{ companies.find(c => c.id === restoreCandidate.company_id)?.name || 'Keine Verwaltung' }}
Dieses Konto erhält wieder Zugriff im Umfang der angezeigten Rolle und Verwaltung. Bestehende Objekte und Historie bleiben erhalten.
| Nr. | Datum | Kunde | Betrag | Fällig | Status | |
|---|---|---|---|---|---|---|
| {{ inv.invoice_number }} | {{ formatDate(inv.issue_date) }} | {{ inv.companies?.name }}{{ inv.objects?.name || '' }} |
€ {{ formatMoney(inv.total_gross) }} | {{ formatDate(inv.due_date) }}+{{ daysOverdue(inv) }} Tage | {{ invoiceStatusLabel(inv) }} | |
| Keine Rechnungen. | ||||||
| Nr. | Datum | Kunde | Betreff | Betrag | Gültig bis | Status | |
|---|---|---|---|---|---|---|---|
| {{ q.quote_number }} | {{ formatDate(q.issue_date) }} | {{ q.companies?.name }} | {{ q.subject || '—' }} | € {{ formatMoney(q.total_gross) }} | {{ q.valid_until ? formatDate(q.valid_until) : '—' }} | {{ quoteStatusLabel(q.status) }} | |
| Keine Angebote. | |||||||
| Vertrag | Kunde / Objekt | Frequenz | Betrag (netto) | Nächste Rechnung | Status | |
|---|---|---|---|---|---|---|
| {{ c.name }} | {{ c.companies?.name }}{{ c.objects?.name || '' }} |
{{ frequencyLabel(c.billing_frequency) }} | € {{ formatMoney(c.monthly_amount_net) }} | {{ formatDate(c.next_invoice_date) }}jetzt fällig | {{ c.active ? 'Aktiv' : 'Pausiert' }} | |
| Keine Verträge angelegt. | ||||||
| Code | Leistung | Einheit | Preis | USt | Für Kunde sichtbar | |
|---|---|---|---|---|---|---|
| {{ s.code || '—' }} | {{ s.name }}{{ s.description }} | {{ s.unit }} | {{ servicePriceLabel(s) }} | {{ s.vat_rate }} % | {{ s.is_public ? 'Sichtbar' : 'Intern' }} | |
| Noch keine Leistungen vorhanden. | ||||||
Foto oder PDF einer Eingangsrechnung hochladen — die KI liest Lieferant, Datum, Beträge und Konto automatisch aus.
| Datum | Lieferant | Rechnungs-Nr | Kategorie | Brutto | USt-Satz | Konto | Status | Beleg |
|---|---|---|---|---|---|---|---|---|
| {{ e.invoice_date ? formatDate(e.invoice_date) : '—' }} |
{{ e.vendor_name }}
{{ e.description.slice(0,80) }}
|
{{ e.invoice_number || '—' }} | {{ e.category }} | € {{ formatMoney(e.amount_gross) }} | {{ e.vat_rate ? e.vat_rate + ' %' : '—' }} | {{ e.bmd_account || '—' }} | {{ e.status === 'paid' ? 'Bezahlt' : e.status === 'open' ? 'Offen' : e.status }} | 📎 🤖 |
| Summe | € {{ formatMoney(expenses.reduce((s, e) => s + Number(e.amount_gross || 0), 0)) }} | |||||||
Diese Daten erscheinen auf jedem Angebot und jeder Rechnung.
PNG, JPG oder SVG. Max 2 MB. Quadratisches oder rechteckiges Logo empfohlen.
{{ company?.name || 'Ihre Objekte' }}
Neuanlagen, Änderungen und Löschungen werden erst nach Freigabe durch Hausbetreuung Fischer übernommen.
{{ objectChangesError }}
🏢 Ihr Zugang ist noch nicht mit einer Hausverwaltung verknüpft.
Bitte melden Sie sich beim Cockpit-Betreiber, damit Ihr Account einer Firma zugeordnet wird.
Es sind noch keine Objekte für {{ company?.name || 'Ihre Firma' }} hinterlegt.
Über „Neues Objekt anfragen“ können Sie ein Objekt zur Freigabe einreichen.
{{ o.address }}
Ihre Objekte: feste Aufenthalte und ausführbare Termine im gemeinsamen Kalender.
Kalender wird geladen …
{{customerCalendarError}}
{{ customerSelectedObject.address }}
{{ customerHistoryView==='upcoming' ? 'Heute und kommende Termine – der nächste zuerst. Stornierte Termine können über den Statusfilter eingeblendet werden.' : 'Vergangene und abgeschlossene Einsätze – der jüngste zuerst. Noch offene vergangene Termine sind am Status erkennbar.' }}
{{ customerHistoryView==='past' ? 'Bei abgeschlossenen Einsätzen zählt das Abschlussdatum, sonst der geplante Termin.' : 'Termine ohne feste Uhrzeit sind entsprechend gekennzeichnet.' }}
Einsätze werden geladen …
{{ customerHistoryError }}
{{ customerDayGroups.length }} {{ customerDayGroups.length === 1 ? 'Position' : 'Positionen' }} gefunden · Arbeitszeiten je Objekt, Tag und Auftragsart summiert
{{ executionCostTotal(customerHistoryRows) }} · Kosten netto, zzgl. hinterlegter USt.
Keine geplanten Termine für diese Filter.
{{ c.objects?.address }}
{{ c.job_category==='Sonstiges' ? c.job_category_custom || 'Sonstiges' : c.job_category || 'Reinigung' }}
{{ unitSummary(c.unit_numbers) }}
| Datum | Objekt | Auftragsart | Gesamtarbeitszeit | Aufgaben | Leistungskosten | Einsatz | Abrechnung |
|---|---|---|---|---|---|---|---|
| {{ formatDate(c.date) }}Abgeschlossen | {{ c.objects?.name }}{{ c.objects?.address }}{{ unitSummary(c.unit_numbers) }} |
{{ c.category }} | {{ customerDayDuration(c) }} | {{ c.task_progress }} | {{ c.cost.complete ? '€ '+formatMoney(c.cost.net)+' netto' : 'Preis noch offen' }}
Leistungen anzeigen{{ line.activity || 'Leistung' }} {{ line.description }} {{ line.kind === 'material' ? 'Material' : line.flat ? 'Pauschale' : line.minutes+' Min · '+(line.hourly_rate==null ? 'Stundensatz fehlt' : '€ '+formatMoney(line.hourly_rate)+' / Std') }} {{ line.net==null ? 'Preis noch offen' : '€ '+formatMoney(line.net)+' netto' }} |
{{ statusLabel(status) }} | {{ billingLabel(billing) }}{{ billing._summary.invoice_reference }}Gesamte Rechnung: € {{ formatMoney(billing._cost.invoice.gross) }} brutto · bezahlt: € {{ formatMoney(billing._cost.invoice.paid || 0) }} |
| Keine Einsätze für diese Filter gefunden. |
{{ r.response }}
Alle Preise zzgl. gesetzlicher Umsatzsteuer. Für Pauschal- und Vertragspreise gerne individuelles Angebot anfragen.
{{ s.description }}
Wählen Sie aus, welche Leistungen Sie schätzen lassen möchten, geben Sie die Mengen ein und schicken Sie uns die Anfrage. Wir bestätigen oder schlagen einen Auftrag vor.
Für die Prüfung des 24-Stunden-Vorlaufs erforderlich.
Weniger als 24 Stunden Vorlauf: +30 %. Samstag/Sonntag: +30 %. Treffen beide Gründe zu: zusammen +60 % auf den Grundpreis. Ohne konkreten Termin wird ein möglicher Aufschlag erst nach Klärung berücksichtigt.
Die hier angezeigte Summe ist eine Schätzung. Nach Eingang Ihrer Anfrage prüfen wir die tatsächlichen Gegebenheiten vor Ort und senden Ihnen ggf. ein verbindliches Angebot zu.
Klicken Sie auf eine Zeile, um die Rechnung als PDF herunterzuladen.
| Nr. | Datum | Betreff | Betrag | Fällig | Status | |
|---|---|---|---|---|---|---|
| {{ inv.invoice_number }} | {{ formatDate(inv.issue_date) }} | {{ inv.subject || inv.objects?.name || '—' }} | € {{ formatMoney(inv.total_gross) }} | {{ formatDate(inv.due_date) }} | {{ invoiceStatusLabel(inv) }} | |
| Noch keine Rechnungen vorhanden. | ||||||
Alle dokumentierten Räum-/Streueinsätze auf Ihren Objekten. Jeder Einsatz mit Mitarbeiter, Uhrzeit, GPS-Position und Foto-Nachweis — wichtig für Versicherung bei Sturzschäden.
{{ wp.notes }}
Übersicht aller geplanten und laufenden Arbeiten zu Ihrer Liegenschaft.
{{ t.description }}