Stundenkonto und Vorschuss am Einrichtungs-Ticket und beim Kunden

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Sonnet 5.5 committed 2026-10-16 13:45:39 +00:00
1 parent f0d39f2eee
commit dce7c3e53a
7 files changed
+154 -2

No files matched your search

+16 -1
View File
@@ -4,6 +4,7 @@ import { PageHeader, Tabs, Card, EmptyState, Button } from '../components/ui'
import UrgentToggle from '../components/UrgentToggle'
import WorksheetSummary from '../components/WorksheetSummary'
import WorksheetList from '../components/WorksheetList'
import StundenkontoLeiste from '../components/customer/StundenkontoLeiste'
import ProjectContextPanel from '../components/ProjectContextPanel'
import TicketProjects from '../components/TicketProjects'
import CreateWorksheetModal from '../components/CreateWorksheetModal'
@@ -18,7 +19,9 @@ import { databases, DATABASE_ID, COLLECTIONS } from '../lib/appwrite'
import { elapsedLabel } from '../lib/elapsed'
import { canAddOwnSupport } from '../lib/support'
import { canEditWorksheetTimes, serviceTypeLabel } from '../lib/ticketForm'
import { nachtragPlanFelder } from '../lib/planVorgabe'
import { einrichtungAbrechnung, nachtragPlanFelder } from '../lib/planVorgabe'
import { einrichtungText } from '../lib/stundenkontoView'
import { worksheetSums } from '../lib/worksheetView'
import { listBackPath, resolveTicketTab, ticketPath, ticketRef } from '../lib/ticketRoutes'
import { statusSelectOptions, ticketTypeLabel } from '../lib/ticketStatus'
import { appointmentText, assigneeOptions, dueText, ticketNumber } from '../lib/ticketView'
@@ -112,6 +115,9 @@ function TicketView({ ticket, updateWorkorder, tab }) {
tab === 'arbeitsblaetter' || showCreateWorksheet
)
// Einrichtungs-Ticket: 'abo' | 'projekt' | '' (V9); bei 'abo' zeigt die Seite das Stundenkonto des Kunden
const einrichtung = einrichtungAbrechnung(ticket)
const isPending = (field) => pending[field] !== undefined
const shown = (field, current) => (isPending(field) ? pending[field] : current)
@@ -254,6 +260,15 @@ function TicketView({ ticket, updateWorkorder, tab }) {
onChange={(id) => { if (id !== tab) goToTab(id) }}
/>
{einrichtung && (
<>
<p className="muted mb-2">{einrichtungText(ticket)}</p>
{einrichtung === 'abo' && (
<StundenkontoLeiste customerId={ticket.customerId} reloadKey={`${worksheets.length}:${worksheetSums(worksheets).aboMinutes}`} />
)}
</>
)}
{tab === 'details' && (
<>
<Card title="Ticket-Beschreibung">